#include <iostream>
namespace My
{
template <typename T>
class MyClass {
public:
void dosome();
void doother();
};
template <typename T>
void MyClass<T>::dosome() {}
template <typename T>
void MyClass<T>::doother() {}
template<> void MyClass<char>::dosome(); // Don't forget this
}
template<>
void My::MyClass<char>::dosome() {
std::cout << "specialization" << std::endl;
}
int main() {
My::MyClass<int> a;
My::MyClass<char> b;
a.dosome(); // This must call the generic template definition
b.dosome(); // This must call the specialization
a.doother(); // This must call the generic template definition
b.doother();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKbmFtZXNwYWNlIE15CnsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpjbGFzcyBNeUNsYXNzIHsKcHVibGljOgoJdm9pZCBkb3NvbWUoKTsKCXZvaWQgZG9vdGhlcigpOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnZvaWQgTXlDbGFzczxUPjo6ZG9zb21lKCkge30KdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnZvaWQgTXlDbGFzczxUPjo6ZG9vdGhlcigpIHt9Cgp0ZW1wbGF0ZTw+IHZvaWQgTXlDbGFzczxjaGFyPjo6ZG9zb21lKCk7IC8vIERvbid0IGZvcmdldCB0aGlzCgp9Cgp0ZW1wbGF0ZTw+CnZvaWQgTXk6Ok15Q2xhc3M8Y2hhcj46OmRvc29tZSgpIHsKCXN0ZDo6Y291dCA8PCAic3BlY2lhbGl6YXRpb24iIDw8IHN0ZDo6ZW5kbDsKfQoKCmludCBtYWluKCkgewpNeTo6TXlDbGFzczxpbnQ+IGE7Ck15OjpNeUNsYXNzPGNoYXI+IGI7CmEuZG9zb21lKCk7IC8vIFRoaXMgbXVzdCBjYWxsIHRoZSBnZW5lcmljIHRlbXBsYXRlIGRlZmluaXRpb24KYi5kb3NvbWUoKTsgLy8gVGhpcyBtdXN0IGNhbGwgdGhlIHNwZWNpYWxpemF0aW9uCmEuZG9vdGhlcigpOyAvLyBUaGlzIG11c3QgY2FsbCB0aGUgZ2VuZXJpYyB0ZW1wbGF0ZSBkZWZpbml0aW9uCmIuZG9vdGhlcigpOwoKCXJldHVybiAwOwp9Cg==