#include <iostream>
#include <type_traits>
template <typename T,typename Enable=void>
struct test
{
const char* value = "Primary";
};
#if 1 // toggle this
template <typename T>
struct test<T,typename std::enable_if< std::is_same<T,T>::value >::type >
{
const char* value = "Specialization";
};
#else
template <typename T>
struct test<T,typename std::enable_if< std::is_same<T,T>::value,T >::type>
{ /// ^
const char* value = "Specialization";
};
#endif
int main() {
test<int> v;
std::cout << v.value << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCx0eXBlbmFtZSBFbmFibGU9dm9pZD4Kc3RydWN0IHRlc3QKewoJY29uc3QgY2hhciogdmFsdWUgPSAiUHJpbWFyeSI7Cn07CgojaWYgMSAvLyB0b2dnbGUgdGhpcwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCB0ZXN0PFQsdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IHN0ZDo6aXNfc2FtZTxULFQ+Ojp2YWx1ZSA+Ojp0eXBlID4gCnsKCWNvbnN0IGNoYXIqIHZhbHVlID0gIlNwZWNpYWxpemF0aW9uIjsKfTsKCiNlbHNlCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKc3RydWN0IHRlc3Q8VCx0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwgc3RkOjppc19zYW1lPFQsVD46OnZhbHVlLFQgPjo6dHlwZT4gCnsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vICBeICAgIAoJY29uc3QgY2hhciogdmFsdWUgPSAiU3BlY2lhbGl6YXRpb24iOwp9OwoKI2VuZGlmCgppbnQgbWFpbigpIHsKCXRlc3Q8aW50PiB2OwoJc3RkOjpjb3V0IDw8IHYudmFsdWUgPDwgc3RkOjplbmRsOwoJcmV0dXJuIDA7Cn0=