Если у меня есть шаблон функции, какКак Вы выбираете значение против ссылки на методы шаблона
template<typename T>
void doSomething(const T arg) {.....}
тогда я не знаю заранее, если T является простой INT или если это огромная структура. Если это int, то передача по значению имеет смысл, а структура должна передаваться по ссылке.
Как создать функцию шаблона, которая работает разумно с обоими типами аргументов?
Не будет ли ваша функция обязательной 'inline' (поскольку это только заголовок)? В этом случае компилятор может оптимизировать аргументы 'const int &' для 'int'. Вы можете (= должен) проверить, есть ли какой-либо измеримый выигрыш от использования простых значений вместо ссылок 'const'. – Walter
Возможный дубликат [Generic for loop для элементарного и сложного типа] (http://stackoverflow.com/questions/37272094/generic-for-loop-for-elementary-and-complex-type) –