#include // エラー回避用 // template void AnyPrint(T *p) { p->Print(); } class Hoge; class Foo { public: Hoge *GetPtr() { return m_pHoge; } void SetPtr(Hoge *p) { m_pHoge = p; } template void Func() { GetPtr()->Print(); // AnyPrint(GetPtr()); // こうすると通る // } private: Hoge *m_pHoge; }; class Hoge { public: void Print() { printf("hoge\n"); } }; int main() { Foo foo; Hoge hoge; foo.SetPtr(&hoge); foo.Func(); return 0; }