]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/boost/proto/proto_typeof.hpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / boost / proto / proto_typeof.hpp
1 ///////////////////////////////////////////////////////////////////////////////
2 /// \file proto_typeof.hpp
3 /// Type registrations so that proto expression templates can be used together
4 /// with the Boost.Typeof library.
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_XPRESSIVE_PROTO_PROTO_TYPEOF_H
11 #define BOOST_XPRESSIVE_PROTO_PROTO_TYPEOF_H
12
13 #include <boost/config.hpp>
14 #include <boost/typeof/typeof.hpp>
15 #include <boost/proto/proto_fwd.hpp>
16 #include <boost/proto/deep_copy.hpp>
17 #include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
18
19 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::terminal)
20 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::unary_plus)
21 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::negate)
22 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::dereference)
23 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::complement)
24 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::address_of)
25 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::logical_not)
26 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::pre_inc)
27 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::pre_dec)
28 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::post_inc)
29 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::post_dec)
30 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::shift_left)
31 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::shift_right)
32 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::multiplies)
33 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::divides)
34 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::modulus)
35 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::plus)
36 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::minus)
37 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::less)
38 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::greater)
39 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::less_equal)
40 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::greater_equal)
41 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::equal_to)
42 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::not_equal_to)
43 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::logical_or)
44 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::logical_and)
45 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::bitwise_and)
46 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::bitwise_or)
47 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::bitwise_xor)
48 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::comma)
49 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::mem_ptr)
50 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::assign)
51 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::shift_left_assign)
52 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::shift_right_assign)
53 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::multiplies_assign)
54 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::divides_assign)
55 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::modulus_assign)
56 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::plus_assign)
57 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::minus_assign)
58 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::bitwise_and_assign)
59 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::bitwise_or_assign)
60 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::bitwise_xor_assign)
61 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::subscript)
62 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::member)
63 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::if_else_)
64 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::function)
65
66 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::exprns_::is_proto_expr)
67 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::exprns_::expr, (typename)(typename)(long))
68 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::exprns_::basic_expr, (typename)(typename)(long))
69 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::utility::literal, (typename)(typename))
70
71 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::detail::not_a_generator)
72 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::detail::not_a_grammar)
73 BOOST_TYPEOF_REGISTER_TYPE(boost::proto::detail::not_a_domain)
74 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::domain, 3)
75
76 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::term, 1)
77 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list1, 1)
78 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list2, 2)
79 // can't use PP metaprogramming here because all typeof registrations
80 // must be on separate lines.
81 #if BOOST_PROTO_MAX_ARITY >= 3
82 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list3, 3)
83 #endif
84 #if BOOST_PROTO_MAX_ARITY >= 4
85 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list4, 4)
86 #endif
87 #if BOOST_PROTO_MAX_ARITY >= 5
88 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list5, 5)
89 #endif
90 #if BOOST_PROTO_MAX_ARITY >= 6
91 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list6, 6)
92 #endif
93 #if BOOST_PROTO_MAX_ARITY >= 7
94 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list7, 7)
95 #endif
96 #if BOOST_PROTO_MAX_ARITY >= 8
97 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list8, 8)
98 #endif
99 #if BOOST_PROTO_MAX_ARITY >= 9
100 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list9, 9)
101 #endif
102 #if BOOST_PROTO_MAX_ARITY >= 10
103 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list10, 10)
104 #endif
105 #if BOOST_PROTO_MAX_ARITY >= 11
106 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list11, 11)
107 #endif
108 #if BOOST_PROTO_MAX_ARITY >= 12
109 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list12, 12)
110 #endif
111 #if BOOST_PROTO_MAX_ARITY >= 13
112 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list13, 13)
113 #endif
114 #if BOOST_PROTO_MAX_ARITY >= 14
115 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list14, 14)
116 #endif
117 #if BOOST_PROTO_MAX_ARITY >= 15
118 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list15, 15)
119 #endif
120 #if BOOST_PROTO_MAX_ARITY >= 16
121 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list16, 16)
122 #endif
123 #if BOOST_PROTO_MAX_ARITY >= 17
124 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list17, 17)
125 #endif
126 #if BOOST_PROTO_MAX_ARITY >= 18
127 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list18, 18)
128 #endif
129 #if BOOST_PROTO_MAX_ARITY >= 19
130 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list19, 19)
131 #endif
132 #if BOOST_PROTO_MAX_ARITY >= 20
133 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list20, 20)
134 #endif
135
136 #define BOOST_PROTO_AUTO(Var, Expr) BOOST_AUTO(Var, boost::proto::deep_copy(Expr))
137 #define BOOST_PROTO_AUTO_TPL(Var, Expr) BOOST_AUTO_TPL(Var, boost::proto::deep_copy(Expr))
138
139 #endif