arr
- это параметр функции, тип которого выводится из T
и n
.
Подумайте об изменении кода на:
template<typename T, int n>
T max(T (&arr)[n])
{
T* maxel = &(arr[0]);
for(int i = 1; i <n; ++i)
if (*maxel < arr[i])
maxel = &(arr[i]);
return *maxel;
}
В вашей версии, если выЯ дам некоторый массив объектов, которые будут увеличиваться при увеличении индекса каждый раз, когда будет вызываться копия ctor - и это может быть как-то дорого, в зависимости от типа T
.