Function template specialization

C

C++Liliput

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)
{ -------------------------------------------------------------------------------------------------
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?
 
M

Michael DOUBEZ

C++Liliput a écrit :
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)
{ -------------------------------------------------------------------------------------------------
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)
{
....
}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,774
Messages
2,569,596
Members
45,144
Latest member
KetoBaseReviews
Top