Connecting Tech Pros Worldwide Help | Site Map

Function template specialization

  #1  
Old January 17th, 2008, 11:05 AM
C++Liliput
Guest
 
Posts: n/a
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?
  #2  
Old January 17th, 2008, 11:15 AM
Michael DOUBEZ
Guest
 
Posts: n/a

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


Similar Threads
Thread Thread Starter Forum Replies Last Post
Static Member Function Template Specialization mike b answers 13 October 17th, 2007 09:25 AM
Compiler bug w/ partial function template specialization w/ multiple parameters Michael Stembera answers 2 November 16th, 2005 10:44 PM
function template specialization ambiguity Rafal Dabrowa answers 1 July 22nd, 2005 11:17 PM
Novice Question: Function Template Specialization CoolPint answers 7 July 22nd, 2005 04:32 AM