Проблема в том, что тип, который вы используете в main
, не соответствует типу специализации. Когда вы вызываете maxn(arr_cha, 2)
, компилятор пытается определить параметры (он пока не смотрит на специализацию, поскольку это происходит только после вывода). Из этого следует, что arr_cha
определяется как char*[]
. Это не соответствует const char*[]
, который берет специализация, поэтому специализация никогда не рассматривается. Вместо этого компилятор вытеснит maxn
из template<typename T> T maxn(T arr[], int len)
с T
, выведенным как char*
.
Чтобы получить специализацию для работы, вам нужно
template<> char * maxn(char *arr[], int len)
{
return arr[0];
}
Или вы можете просто не специализировать шаблон и вместо этого перегрузить его
char * maxn(char *arr[], int len)
{
return arr[0];
}
и вы получите те же результаты.