]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/proto/include/boost/proto/args.hpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / proto / include / boost / proto / args.hpp
CommitLineData
7c673cae
FG
1///////////////////////////////////////////////////////////////////////////////
2/// \file args.hpp
3/// Contains definition of \c term\<\>, \c list1\<\>, \c list2\<\>, ...
4/// class templates.
5//
6// Copyright 2008 Eric Niebler. Distributed under the Boost
7// Software License, Version 1.0. (See accompanying file
8// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9
10#ifndef BOOST_PROTO_ARGS_HPP_EAN_04_01_2005
11#define BOOST_PROTO_ARGS_HPP_EAN_04_01_2005
12
13#include <boost/preprocessor/cat.hpp>
14#include <boost/preprocessor/arithmetic/dec.hpp>
15#include <boost/preprocessor/iteration/iterate.hpp>
16#include <boost/preprocessor/repetition/enum_params.hpp>
17#include <boost/preprocessor/repetition/repeat.hpp>
18#include <boost/preprocessor/repetition/repeat_from_to.hpp>
19#include <boost/mpl/if.hpp>
20#include <boost/mpl/void.hpp>
21#include <boost/proto/proto_fwd.hpp>
22#include <boost/proto/detail/is_noncopyable.hpp>
23
24#include <boost/mpl/or.hpp>
25#include <boost/type_traits/is_function.hpp>
26#include <boost/type_traits/is_abstract.hpp>
27
28namespace boost { namespace proto
29{
30 namespace detail
31 {
32 /// INTERNAL ONLY
33 template<typename Expr>
34 struct expr_traits
35 {
36 typedef Expr value_type;
37 typedef Expr &reference;
38 typedef Expr const &const_reference;
39 };
40
41 /// INTERNAL ONLY
42 template<typename Expr>
43 struct expr_traits<Expr &>
44 {
45 typedef Expr value_type;
46 typedef Expr &reference;
47 typedef Expr &const_reference;
48 };
49
50 /// INTERNAL ONLY
51 template<typename Expr>
52 struct expr_traits<Expr const &>
53 {
54 typedef Expr value_type;
55 typedef Expr const &reference;
56 typedef Expr const &const_reference;
57 };
58
59 /// INTERNAL ONLY
60 template<typename T>
61 struct term_traits
62 {
63 typedef T value_type;
64 typedef T &reference;
65 typedef T const &const_reference;
66 };
67
68 /// INTERNAL ONLY
69 template<typename T>
70 struct term_traits<T &>
71 {
72 typedef typename mpl::if_c<is_noncopyable<T>::value, T &, T>::type value_type;
73 typedef T &reference;
74 typedef T &const_reference;
75 };
76
77 /// INTERNAL ONLY
78 template<typename T>
79 struct term_traits<T const &>
80 {
81 typedef T value_type;
82 typedef T const &reference;
83 typedef T const &const_reference;
84 };
85
86 /// INTERNAL ONLY
87 template<typename T, std::size_t N>
88 struct term_traits<T (&)[N]>
89 {
90 typedef T value_type[N];
91 typedef T (&reference)[N];
92 typedef T (&const_reference)[N];
93 };
94
95 /// INTERNAL ONLY
96 template<typename T, std::size_t N>
97 struct term_traits<T const (&)[N]>
98 {
99 typedef T value_type[N];
100 typedef T const (&reference)[N];
101 typedef T const (&const_reference)[N];
102 };
103
104 /// INTERNAL ONLY
105 template<typename T, std::size_t N>
106 struct term_traits<T[N]>
107 {
108 typedef T value_type[N];
109 typedef T (&reference)[N];
110 typedef T const (&const_reference)[N];
111 };
112
113 /// INTERNAL ONLY
114 template<typename T, std::size_t N>
115 struct term_traits<T const[N]>
116 {
117 typedef T value_type[N];
118 typedef T const (&reference)[N];
119 typedef T const (&const_reference)[N];
120 };
121 }
122
123 namespace argsns_
124 {
125 // This is where term and all the different listN templates are defined
126 #include <boost/proto/detail/args.hpp>
127 }
128
129}}
130
131#endif
132