#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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bGltaXRzPgoKLy8gQzI1ODkgd2hlbiBjb21waWxpbmcgd2l0aCBzcGVjaWFsaXphdGlvbiwgZmluZSB3aGVuIGNvbXBpbGluZyB3aXRob3V0CnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnZvaWQgZm9vKFQgdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjppbmZpbml0eSgpKQp7Cn0KCi8vIHRoaXMgc3BlY2lhbGl6YXRpb24gY2F1c2VzIGNvbXBpbGVyIGVycm9yIEMyNTg5IGFib3ZlCnRlbXBsYXRlPD4Kdm9pZCBmb288ZmxvYXQ+KGZsb2F0IHZhbHVlKQp7Cn0KCmludCBtYWluKCkKewoJZm9vPGZsb2F0PigpOwoJcmV0dXJuIDA7Cn0=