El siguiente código muestra 2 plantillas de Foo, cada una con 2 parámetros predeterminados, Foo1 tiene un prototipo separado y Foo2 no, por lo demás son iguales.Dos parámetros predeterminados en la plantilla, ¿qué hay de malo aquí?
¿Por qué la primera llamada a Foo1 causa que el compilador (VS2010 Native C++) produzca un error mientras que los otros 3 funcionan?
#include <limits>
// not needed but to prevent answers in this direction...
#undef max
#undef min
template< typename T >
void Foo1(T v1 = std::numeric_limits<T>::min(), T v2 = std::numeric_limits<T>::max());
template< typename T >
inline
void Foo1(T v1, T v2)
{
// ...
}
template< typename T >
inline
void Foo2(T v1 = std::numeric_limits<T>::min(), T v2 = std::numeric_limits<T>::max())
{
// ...
}
int main()
{
Foo1<int>(0); /* Will cause error C2589: '::' : illegal token on right side of '::' */
Foo1<int>(0, 10);
Foo2<int>(0);
Foo2<int>(0, 10);
}
He editado el post para proporcionar una 'main()'. De lo contrario, buena pregunta, +1. –