template class Singleton { private: static T* m_instance; Singleton() { } ~Singleton() { } public: static T* Instance() { if(m_instance == NULL) m_instance = new T(); return m_instance; }; template T *Singleton::m_instance = NULL; class A : public Singleton { };