Calling multiple functions which take their parameters by reference is quite convenient:
foo(&a);
bar(&a);
baz(&a);
But if functions are defined via move semantics, one has to explicitly clone non-Copy types:
foo(a.clone());
bar(a.clone());
baz(a.clone());
bab(a);
Also consider the usage of the vec! macro, to create a Vec of cloned values:
let v = vec![foo.clone(), bar.clone(), baz.clone(), a.clone(), b.clone(), c.clone()]
The visual noise gets rather bad.
I suggest introducing an operator similar to * and & which clones the value.
Above examples but with + defined as the clone()-operator (+ just being a suggestion, any character would do):
foo(+a);
bar(+a);
baz(+a);
bab(a);
let v = vec![+foo, +bar, +baz, +a, +b, +c]
(copy of https://github.com/rust-lang/rfcs/issues/2350 )