Conversion error in template specialization
Hello,
I am trying to specialize a template for C-style strings, but I am
getting a
compile time error. Please take a look at the following code:
#include <cstring>
#include <iostream>
template <class T>
struct minimum_impl
{
static const T& impl(
const T& a, const T& b )
{
return a < b ? a : b;
}
};
template <std::size_t N>
struct minimum_impl<const char[N]>
{
typedef const char( &TYPE )[N];
static TYPE impl( TYPE a, TYPE b )
{
// Error here: Cannot convert from
// const 'char*' to 'const char (&) [2]'.
return std::strcmp( a, b ) < 0 ? a : b;
}
};
template <class T> inline
const T& minimum( const T& a, const T& b )
{
return minimum_impl<const T>::impl( a, b );
}
int main()
{
char a[] = "a";
char b[] = "b";
std::cout << minimum( a, b ) << std::endl;
return 0;
}
The error occurs in return expression of 'minimum_impl<const
char[N]>::impl()', for not being able to convert from 'const char*' to
'const char (&)[2]'. Where does that 'const char*' come from?
--
Matthias Hofmann
Anvil-Soft, CEO
http://www.anvil-soft.com - The Creators of Toilet Tycoon
http://www.anvil-soft.de - Die Macher des Klomanagers
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]