#include <iostream>
template<typename T, T *ptr>
struct X
{
void f() { std::cout << "primary" << std::endl; }
};
template<>
struct X<std::nullptr_t, nullptr>
{
void f() { std::cout << "specialization" << std::endl; }
};
int i = 10;
int main() {
X<int, &i>().f();
X<std::nullptr_t, nullptr>().f();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGU8dHlwZW5hbWUgVCwgVCAqcHRyPgpzdHJ1Y3QgWAp7Cgl2b2lkIGYoKSB7IHN0ZDo6Y291dCA8PCAicHJpbWFyeSIgPDwgc3RkOjplbmRsOyB9Cn07Cgp0ZW1wbGF0ZTw+CnN0cnVjdCBYPHN0ZDo6bnVsbHB0cl90LCBudWxscHRyPgp7Cgl2b2lkIGYoKSB7IHN0ZDo6Y291dCA8PCAic3BlY2lhbGl6YXRpb24iIDw8IHN0ZDo6ZW5kbDsgfQp9OwoKCmludCBpID0gMTA7CmludCBtYWluKCkgewoJCglYPGludCwgJmk+KCkuZigpOwoJWDxzdGQ6Om51bGxwdHJfdCwgbnVsbHB0cj4oKS5mKCk7CglyZXR1cm4gMDsKfQ==