
#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(const SomeClass<T>*)
{
   std::cout << "foo() SomeClass<T> - Desired function\n";
}

int main()
{
   SomeClass<char>* sc = new SomeClass<char>();
   foo(sc);
   return 0;
}

