The code below shows 2 Foo templates with two default parameters, Foo1 has a separate prototype, and Foo2 does not, they are the same otherwise.
Why would the first call in Foo1 cause the compiler (VS2010 Native C ++) to produce an error while the other 3 work?
#include <limits>
#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);
Foo1<int>(0, 10);
Foo2<int>(0);
Foo2<int>(0, 10);
}
source
share