こういうのはダメ?

template<class T > class A;

typedef A<int> templateClassInt;

templateClassInt* p;

template<class T >
class A {
typedef T Type;
};