#pragma once template class singleton { public: static T& instance(); singleton(const singleton&) = delete; singleton& operator= (singleton) = delete; protected: struct token {}; singleton() = default; }; #include template T& singleton::instance() { static const std::unique_ptr instance{ new T{token{}} }; return *instance; }