Re: Explicitly specializing std::min() on VC++ 2005 Express Edition
"Tom Widmer [VC++ MVP]" <tom_usenet@hotmail.com> schrieb im Newsbeitrag
news:eyKHNIkjHHA.4872@TK2MSFTNGP03.phx.gbl...
template <std::size_t N>
struct min_impl<char[N]>;
This specialization for non-const char[N] seems superflous, as
minimum<T>() accepts a constant reference, so min_impl<T>::impl() will
never see a non-const char[N].
Good point, though I think it's the other way around - char[N] is needed,
but not char const[N].
When I spezialize as follows:
// Non-const version.
template <std::size_t N>
struct minimum_impl<char[N]>;
then I get an error when calling minimum_impl::impl<>() from within
minimum<>() because the actual parameters are constant. On the other hand,
when I spezialize as follows:
// Const version.
template <std::size_t N>
struct minimum_impl<const char[N]>;
then the primary template is called, not the specialization. I found out
that this is because there is a bug in your implementation of minimum<>().
It should look like this:
template <class T> inline
const T& minimum( const T& a, const T& b )
{
// Note the 'const' before 'T'.
return minimum_impl<const T>::impl( a, b );
}
With this implementation of minimum<>(), only the folowing spezialization
will be called:
// Const version.
template <std::size_t N>
struct minimum_impl<const char[N]>;
template <std::size_t N>
struct min_impl<char[N]>
{
static char const (&impl(char const (&a)[N], char const (&b)[N]))[N]
{ return std::strcmp(a, b) < 0 ? a : b; }
};
C++ declaration syntax isn't very nice.
Indeed, that's why I am trying a typedef:
template <std::size_t N>
struct minimum_impl<const char[N]>
{
typedef const char( &ARG )[N];
static ARG impl( ARG a, ARG b )
{
// C2440 error here.
return std::strcmp( a, b ) < 0 ? a : b;
}
};
That looks much clearer, but on VC++ 2005 Express Edition, it does not work.
I get a C2440 error for not being able to convert from 'const char*' to
'const char (&)[2]' in the return statement. 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