I can write a templated function this way
template<class T> void f(T x) {…}
or this way
template<class T> void f(T const& x) {…}
I guess that the second option can be more optimal as it explicitly avoids a copy, but I suspect that it can also fail for some specific types T
(eg functors?).
So, when should use the first option, and when to use the second? There are also this boost::call_traits<T>::param_type
and boost::reference_wrapper
that were in the answers to my previous question, but people don't use them everywhere, do they? Is there a rule of thumb for this? Thanks.