123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- //-----------------------------------------------------------------------------
- // boost detail/reference_content.hpp header file
- // See http://www.boost.org for updates, documentation, and revision history.
- //-----------------------------------------------------------------------------
- //
- // Copyright (c) 2003
- // Eric Friedman
- //
- // 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_DETAIL_REFERENCE_CONTENT_HPP
- #define BOOST_DETAIL_REFERENCE_CONTENT_HPP
- #include "boost/config.hpp"
- # include "boost/type_traits/integral_constant.hpp"
- # include "boost/type_traits/has_nothrow_copy.hpp"
- namespace boost {
- namespace detail {
- struct void_type {};
- ///////////////////////////////////////////////////////////////////////////////
- // (detail) class template reference_content
- //
- // Non-Assignable wrapper for references.
- //
- template <typename RefT>
- class reference_content
- {
- private: // representation
- RefT content_;
- public: // structors
- ~reference_content()
- {
- }
- reference_content(RefT r)
- : content_( r )
- {
- }
- reference_content(const reference_content& operand)
- : content_( operand.content_ )
- {
- }
- private: // non-Assignable
- reference_content& operator=(const reference_content&);
- public: // queries
- RefT get() const
- {
- return content_;
- }
- };
- ///////////////////////////////////////////////////////////////////////////////
- // (detail) metafunction make_reference_content
- //
- // Wraps with reference_content if specified type is reference.
- //
- template <typename T = void_type> struct make_reference_content;
- template <typename T>
- struct make_reference_content
- {
- typedef T type;
- };
- template <typename T>
- struct make_reference_content< T& >
- {
- typedef reference_content<T&> type;
- };
- template <>
- struct make_reference_content< void_type >
- {
- template <typename T>
- struct apply
- : make_reference_content<T>
- {
- };
- typedef void_type type;
- };
- } // namespace detail
- ///////////////////////////////////////////////////////////////////////////////
- // reference_content<T&> type traits specializations
- //
- template <typename T>
- struct has_nothrow_copy<
- ::boost::detail::reference_content< T& >
- >
- : boost::true_type
- {
- };
- } // namespace boost
- #endif // BOOST_DETAIL_REFERENCE_CONTENT_HPP
|