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