#include <iostream>
template<typename T>
struct foo
{
void operator ()() const
{
std::cout << "unspecialized\n";
}
};
template<>
void foo<long>::operator ()() const
{
std::cout << "specialized for long\n";
}
int main()
{
foo<int> f1;
foo<long> f2;
f1();
f2();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kc3RydWN0IGZvbwp7CiAgICB2b2lkIG9wZXJhdG9yICgpKCkgY29uc3QKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgInVuc3BlY2lhbGl6ZWRcbiI7CiAgICB9Cn07Cgp0ZW1wbGF0ZTw+CnZvaWQgZm9vPGxvbmc+OjpvcGVyYXRvciAoKSgpIGNvbnN0CnsKICAgIHN0ZDo6Y291dCA8PCAic3BlY2lhbGl6ZWQgZm9yIGxvbmdcbiI7Cn0KCmludCBtYWluKCkKewogICAgZm9vPGludD4gIGYxOwogICAgZm9vPGxvbmc+IGYyOwogICAgZjEoKTsKICAgIGYyKCk7Cn0=