1//-----------------------------------------------------------------------------
2// boost detail/reference_content.hpp header file
3// See http://www.boost.org for updates, documentation, and revision history.
4//-----------------------------------------------------------------------------
5//
6// Copyright (c) 2003
7// Eric Friedman
8//
9// Distributed under the Boost Software License, Version 1.0. (See
10// accompanying file LICENSE_1_0.txt or copy at
11// http://www.boost.org/LICENSE_1_0.txt)
12
13#ifndef BOOST_DETAIL_REFERENCE_CONTENT_HPP
14#define BOOST_DETAIL_REFERENCE_CONTENT_HPP
15
16#include "boost/config.hpp"
17
18# include "boost/mpl/bool.hpp"
19# include "boost/type_traits/has_nothrow_copy.hpp"
20
21#include "boost/mpl/void.hpp"
22
23namespace boost {
24
25namespace detail {
26
27///////////////////////////////////////////////////////////////////////////////
28// (detail) class template reference_content
29//
30// Non-Assignable wrapper for references.
31//
32template <typename RefT>
33class reference_content
34{
35private: // representation
36
37 RefT content_;
38
39public: // structors
40
41 ~reference_content()
42 {
43 }
44
45 reference_content(RefT r)
46 : content_( r )
47 {
48 }
49
50 reference_content(const reference_content& operand)
51 : content_( operand.content_ )
52 {
53 }
54
55private: // non-Assignable
56
57 reference_content& operator=(const reference_content&);
58
59public: // queries
60
61 RefT get() const
62 {
63 return content_;
64 }
65
66};
67
68///////////////////////////////////////////////////////////////////////////////
69// (detail) metafunction make_reference_content
70//
71// Wraps with reference_content if specified type is reference.
72//
73
74template <typename T = mpl::void_> struct make_reference_content;
75
76
77template <typename T>
78struct make_reference_content
79{
80 typedef T type;
81};
82
83template <typename T>
84struct make_reference_content< T& >
85{
86 typedef reference_content<T&> type;
87};
88
89
90template <>
91struct make_reference_content< mpl::void_ >
92{
93 template <typename T>
94 struct apply
95 : make_reference_content<T>
96 {
97 };
98
99 typedef mpl::void_ type;
100};
101
102} // namespace detail
103
104///////////////////////////////////////////////////////////////////////////////
105// reference_content<T&> type traits specializations
106//
107
108
109template <typename T>
110struct has_nothrow_copy<
111 ::boost::detail::reference_content< T& >
112 >
113 : mpl::true_
114{
115};
116
117
118} // namespace boost
119
120#endif // BOOST_DETAIL_REFERENCE_CONTENT_HPP
121

source code of boost/boost/detail/reference_content.hpp