Посмотрите на этот вопрос .
Используйте const T & arg, если sizeof(T)>sizeof(void*) и используйте T arg, если sizeof(T) <= sizeof(void*). Все основные типы должны быть исключением из этого правила
const T & arg
sizeof(T)>sizeof(void*)
T arg
sizeof(T) <= sizeof(void*)