// Copyright 2002, Fernando Luis Cacciola Carballal. // // 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) // // 21 Ago 2002 (Created) Fernando Cacciola // #ifndef BOOST_UTILITY_VALUE_INIT_21AGO2002_HPP #define BOOST_UTILITY_VALUE_INIT_21AGO2002_HPP #include "boost/detail/select_type.hpp" #include "boost/type_traits/cv_traits.hpp" namespace boost { namespace vinit_detail { template class const_T_base { protected : const_T_base() : x() {} T x ; } ; template struct non_const_T_base { protected : non_const_T_base() : x() {} mutable T x ; } ; template struct select_base { typedef typename boost::detail::if_true< ::boost::is_const::value > ::template then< const_T_base, non_const_T_base >::type type ; } ; } // namespace vinit_detail template class value_initialized : private vinit_detail::select_base::type { public : value_initialized() {} operator T&() const { return this->x ; } T& data() const { return this->x ; } } ; template T const& get ( value_initialized const& x ) { return x.data() ; } template T& get ( value_initialized& x ) { return x.data() ; } } // namespace boost #endif