template <typename T> struct X
{
T v;
void foo();
};
typedef X<int> SomeTypedef;
#if 0
template <typename T> void X<T>::foo() {
//
}
#else
template<> void SomeTypedef::foo() {
//
}
#endif
int main()
{
SomeTypedef a;
a.foo();
}
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBYCnsKICAgIFQgdjsKCiAgICB2b2lkIGZvbygpOwp9OwoKdHlwZWRlZiBYPGludD4gU29tZVR5cGVkZWY7CgojaWYgMAp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdm9pZCBYPFQ+Ojpmb28oKSB7CiAgICAvLwp9CiNlbHNlCnRlbXBsYXRlPD4gdm9pZCBTb21lVHlwZWRlZjo6Zm9vKCkgewogICAgLy8KfQojZW5kaWYKCgppbnQgbWFpbigpCnsKICAgIFNvbWVUeXBlZGVmIGE7CiAgICBhLmZvbygpOwp9Cgo=