There's still a problem with the template parameters. Let me give the relevant class one last try with escapes: template<typename ObjectT=Dummy> class Singleton { static ObjectT* object; public: static ObjectT& Instance() { if (!object) object = new ObjectT(); return *object; } }; template<typename ObjectT> ObjectT* Singleton::object = 0;