boost/archive/detail/dynamically_initialized.hpp
// Copyright David Abrahams 2006. 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)
#ifndef BOOST_ARCHIVE_DETAIL_DYNAMICALLY_INITIALIZED_DWA2006524_HPP
# define BOOST_ARCHIVE_DETAIL_DYNAMICALLY_INITIALIZED_DWA2006524_HPP
# include <boost/serialization/force_include.hpp>
namespace boost { namespace archive { namespace detail {
//
// Provides a dynamically-initialized (singleton) instance of T in a
// way that avoids LNK1179 on vc6. See http://tinyurl.com/ljdp8 or
// http://lists.boost.org/Archives/boost/2006/05/105286.php for
// details.
//
template <class T>
struct dynamically_initialized
{
protected:
static T& instance;
private:
static T& get_instance();
#if defined(__GNUC__)
// Workaround "warning: all member functions in class `
// boost::archive::detail::dynamically_initialized<T>' are private"
public:
void work_around_gcc_warning();
#endif
};
template <class T>
T& dynamically_initialized<T>::instance
= dynamically_initialized<T>::get_instance();
template <class T>
T& dynamically_initialized<T>::get_instance()
{
static T instance_;
return instance_;
}
}}} // namespace boost::archive::detail
#endif // BOOST_ARCHIVE_DETAIL_DYNAMICALLY_INITIALIZED_DWA2006524_HPP