#include <iostream>
#include <limits>

// C2589 when compiling with specialization, fine when compiling without
template<typename T>
void foo(T value = std::numeric_limits<T>::infinity())
{
}

// this specialization causes compiler error C2589 above
template<>
void foo<float>(float value)
{
}

int main()
{
	foo<float>();
	return 0;
}