Quote Originally Posted by iExtreme View Post
I'm just stupid, but shouldn't it be a best match even with out the * ?
It's not a "best match" because it's not even a legal definition. The signature of a function template specialization must match the signature of the to be specialized function template.

So you can write

Code:
template <> char* maxn<char>(char* str[], int ct); // illegal, it's a potential specialization of a function template with signature template <class  T> T* maxn(T* str[],int);

template <> char* maxn<char*>(char* str[], int ct); // ok, it's a specialization of a function template with signature template <class  T> T maxn(T str[],int);

template <> char* maxn(char* str[], int ct); // ok, as above; but this time the type is deduced

char* maxn(char* str[], int ct); // ok, a function overload