となると
template<class T> void f(T); // A template<class T> void f(T*); // B template<> void f<int>(int*); // C int i; f(&i); // Cが呼ばれる
template<class T> void f(T); // A template<class T> void f(T*); // B template<> void f<int*>(int*); // C int i; f(&i); // Bが呼ばれる
当然こうなるわけか.