// Copyright (C) 2001-2003 // Mac Murrett // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org for most recent version including documentation. #ifndef BOOST_SINGLETON_MJM012402_HPP #define BOOST_SINGLETON_MJM012402_HPP #include namespace boost { namespace detail { namespace thread { // class singleton has the same goal as all singletons: create one instance of // a class on demand, then dish it out as requested. template class singleton : private T { private: singleton(); ~singleton(); public: static T &instance(); }; template inline singleton::singleton() { /* no-op */ } template inline singleton::~singleton() { /* no-op */ } template /*static*/ T &singleton::instance() { // function-local static to force this to work correctly at static // initialization time. static singleton s_oT; return(s_oT); } } // namespace thread } // namespace detail } // namespace boost #endif // BOOST_SINGLETON_MJM012402_HPP