#include <type_traits>
#include <iostream>
template <class T, class T1 = void>
struct foo
{
static constexpr char* a = "primary definition\n";
};
struct A
{
};
template <class T>
struct foo<T, A>
{
static constexpr char* a = "secondary definition\n";
};
int main() {
std::cout << foo<int>::a << ", " << foo<int,A>::a << std::endl;
}
I2luY2x1ZGUgPHR5cGVfdHJhaXRzPgojaW5jbHVkZSA8aW9zdHJlYW0+Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVDEgPSB2b2lkPgpzdHJ1Y3QgZm9vCnsKICAgIHN0YXRpYyBjb25zdGV4cHIgY2hhciogYSA9ICJwcmltYXJ5IGRlZmluaXRpb25cbiI7Cn07CgpzdHJ1Y3QgQQp7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4Kc3RydWN0IGZvbzxULCBBPiAKewogICAgc3RhdGljIGNvbnN0ZXhwciBjaGFyKiBhID0gInNlY29uZGFyeSBkZWZpbml0aW9uXG4iOwp9OwoKaW50IG1haW4oKSB7CglzdGQ6OmNvdXQgPDwgZm9vPGludD46OmEgPDwgIiwgIiA8PCBmb288aW50LEE+OjphIDw8IHN0ZDo6ZW5kbDsKfQ==