I understand. There seems to be another way to pass a non-trivial parameter: by value-and-then-get-optimized-into-reference. It is called copy elision (http://en.wikipedia.org/wiki/Copy_elision).

But after all, it is dependent on the compiler, so probably not worth the hassle.

Having said this, there is a similar issue when you return objects by value, per se. See http://en.wikipedia.org/wiki/Return_value_optimization. Here the compiler will optimize the copy away into a reference-passing style return. This is more useful, has it been treated in #354 and #263?