passagem do modelo por valor ou referência const ou…?
Eu posso escrever uma função de modelo dessa maneira
template<class T> void f(T x) {...}
ou dessa maneira
template<class T> void f(T const& x) {...}
Acho que a segunda opção pode ser mais ideal, pois evita explicitamente uma cópia, mas suspeito que também pode falhar em alguns tipos específicosT
(por exemplo, functors?). Então, quando usar a primeira opção e quando usar a segunda? Há também issoboost::call_traits<T>::param_type
eboost::reference_wrapper
que estavam nas respostas para o meupergunta anterior, mas as pessoas não as usam em todos os lugares, não é? Existe uma regra de ouro para isso? Obrigado.