
on Mon Jun 11 2012, Mathias Gaunard <mathias.gaunard-AT-ens-lyon.org> wrote:
On 11/06/2012 13:14, Giovanni Piero Deretta wrote:
The only thing I can think of is assignment operators of derived classes that need to forward to base classes. In that case I agree that pass by value does not work very well (I usually still use pass by value, but implement operator= in term of swap, which forwards to the base class swap).
According to this rule, I should pass by value whenever I want to copy the variable anyway.
template<class T> struct foo { T t; foo(T t_) : t(t_) {} };
Clearly we can see this code causes one copy with rvalues, two with lvalues, instead of always one if we used const-reference.
That's because you wrote it wrong. It should be foo(T t_) : t(std::move(t_)) {}
The only instance where this might be useful is operator=, and then again, it's probably still a bad idea.
I had already pointed out to Dave that the way the rule as worded was incorrect.
? you did? -- Dave Abrahams BoostPro Computing http://www.boostpro.com