#include <iostream>
template <typename T>
class SomeClass
{
};
template <typename T>
void foo(T)
{
std::cout << "foo() Generic - Undesired function\n";
}
template <typename T>
void foo(SomeClass<T>*)
{
std::cout << "foo() SomeClass<T> - Desired function\n";
}
int main()
{
SomeClass<char>* sc = new SomeClass<char>();
foo(sc);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIFNvbWVDbGFzcwp7Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kdm9pZCBmb28oVCkKewogICBzdGQ6OmNvdXQgPDwgImZvbygpIEdlbmVyaWMgLSBVbmRlc2lyZWQgZnVuY3Rpb25cbiI7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgp2b2lkIGZvbyhTb21lQ2xhc3M8VD4qKQp7CiAgIHN0ZDo6Y291dCA8PCAiZm9vKCkgU29tZUNsYXNzPFQ+IC0gRGVzaXJlZCBmdW5jdGlvblxuIjsKfQoKaW50IG1haW4oKQp7CiAgIFNvbWVDbGFzczxjaGFyPiogc2MgPSBuZXcgU29tZUNsYXNzPGNoYXI+KCk7CiAgIGZvbyhzYyk7CiAgIHJldHVybiAwOwp9Cgo=