mirror of
https://github.com/boostorg/utility.git
synced 2025-05-12 05:41:45 +00:00
83 lines
1.6 KiB
C++
83 lines
1.6 KiB
C++
// (C) 2002, Fernando Luis Cacciola Carballal.
|
|
//
|
|
// This material is provided "as is", with absolutely no warranty expressed
|
|
// or implied. Any use is at your own risk.
|
|
//
|
|
// Permission to use or copy this software for any purpose is hereby granted
|
|
// without fee, provided the above notices are retained on all copies.
|
|
// Permission to modify the code and to distribute modified code is granted,
|
|
// provided the above notices are retained, and a notice that the code was
|
|
// modified is included with the above copyright notice.
|
|
//
|
|
// 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 T>
|
|
class const_T_base
|
|
{
|
|
protected :
|
|
|
|
const_T_base() : x() {}
|
|
|
|
T x ;
|
|
} ;
|
|
|
|
template<class T>
|
|
struct non_const_T_base
|
|
{
|
|
protected :
|
|
|
|
non_const_T_base() : x() {}
|
|
|
|
mutable T x ;
|
|
} ;
|
|
|
|
template<class T>
|
|
struct select_base
|
|
{
|
|
typedef typename
|
|
detail::if_true< ::boost::is_const<T>::value >
|
|
::template then< const_T_base<T>, non_const_T_base<T> >::type type ;
|
|
} ;
|
|
|
|
} // namespace vinit_detail
|
|
|
|
template<class T>
|
|
class value_initialized : private vinit_detail::select_base<T>::type
|
|
{
|
|
public :
|
|
|
|
value_initialized() {}
|
|
|
|
operator T&() const { return this->x ; }
|
|
|
|
T& data() const { return this->x ; }
|
|
|
|
} ;
|
|
|
|
template<class T>
|
|
T const& get ( value_initialized<T> const& x )
|
|
{
|
|
return x.data() ;
|
|
}
|
|
template<class T>
|
|
T& get ( value_initialized<T>& x )
|
|
{
|
|
return x.data() ;
|
|
}
|
|
|
|
} // namespace boost
|
|
|
|
|
|
#endif
|
|
|