Connecting Tech Pros Worldwide Forums | Help | Site Map

Function template specialization

C++Liliput
Guest
 
Posts: n/a
#1: Jan 17 '08
I have a template function of the type

template<typename T>
const T max(const T& a, const T& b)
{
return a b ? a : b;
}

I provide a template specialization only for C strings as follows:

template<>
const char* max(const char*& a, const char*& b)
{ -------------------------------------------------------------------------------------------------
Quote:
ERROR
return strcmp(a, b) 0 ? a : b;
}

Now I have the following code in main:

const char* cstr1 = "STRING";
const char* cstr2 = "string";

const char* cstrMax = ::max(cstr1, cstr2);

when I compile this code on my Solaris machine, I keep getting the
error "Could not find a match for max<T>(const char*&, const char*&)"
at the line mentioned above (dotted line ending with ERROR).

Surprisingly when I change my template definition to the following,
everything compiles fine:

template<typename T>
T max(T& a, T& b)
{
return a b ? a : b;
}

As you can see all I have done is remove the const keyword qualifying
the arguments and the return type. In the first case, I would assume
that the typename should evaluate to "char*" but that obviously does
not happen. In the second case, the typename obviously evaluates to
"const char*" and everything works fine. What is the reason that there
is a compilation error in the first case?

Michael DOUBEZ
Guest
 
Posts: n/a
#2: Jan 17 '08

re: Function template specialization


C++Liliput a écrit :
Quote:
I have a template function of the type
>
template<typename T>
const T max(const T& a, const T& b)
{
return a b ? a : b;
}
>
I provide a template specialization only for C strings as follows:
>
template<>
const char* max(const char*& a, const char*& b)
{ -------------------------------------------------------------------------------------------------
Quote:
>ERROR
return strcmp(a, b) 0 ? a : b;
}
Specialization of T=char* is
template<>
char* const max(char* const& a, char* const& b)
{
....
}

You should define
char const * const max(char const * const& a, char const * const& b)
{
....
}


Closed Thread