1 ///////////////////////////////////////////////////////////////////////////////
3 /// Contains the tags for all the overloadable operators in C++
5 // Copyright 2008 Eric Niebler. Distributed under the Boost
6 // Software License, Version 1.0. (See accompanying file
7 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9 #ifndef BOOST_PROTO_TAGS_HPP_EAN_04_01_2005
10 #define BOOST_PROTO_TAGS_HPP_EAN_04_01_2005
12 #include <boost/proto/detail/prefix.hpp>
13 #include <boost/proto/proto_fwd.hpp>
14 #include <boost/proto/detail/suffix.hpp>
16 namespace boost
{ namespace proto
{ namespace tag
19 /// Tag type for terminals; aka, leaves in the expression tree.
22 /// Tag type for the unary + operator.
25 /// Tag type for the unary - operator.
28 /// Tag type for the unary * operator.
29 struct dereference
{};
31 /// Tag type for the unary ~ operator.
34 /// Tag type for the unary & operator.
37 /// Tag type for the unary ! operator.
38 struct logical_not
{};
40 /// Tag type for the unary prefix ++ operator.
43 /// Tag type for the unary prefix -- operator.
46 /// Tag type for the unary postfix ++ operator.
49 /// Tag type for the unary postfix -- operator.
52 /// Tag type for the binary \<\< operator.
55 /// Tag type for the binary \>\> operator.
56 struct shift_right
{};
58 /// Tag type for the binary * operator.
61 /// Tag type for the binary / operator.
64 /// Tag type for the binary % operator.
67 /// Tag type for the binary + operator.
70 /// Tag type for the binary - operator.
73 /// Tag type for the binary \< operator.
76 /// Tag type for the binary \> operator.
79 /// Tag type for the binary \<= operator.
82 /// Tag type for the binary \>= operator.
83 struct greater_equal
{};
85 /// Tag type for the binary == operator.
88 /// Tag type for the binary != operator.
89 struct not_equal_to
{};
91 /// Tag type for the binary || operator.
94 /// Tag type for the binary && operator.
95 struct logical_and
{};
97 /// Tag type for the binary & operator.
98 struct bitwise_and
{};
100 /// Tag type for the binary | operator.
101 struct bitwise_or
{};
103 /// Tag type for the binary ^ operator.
104 struct bitwise_xor
{};
106 /// Tag type for the binary , operator.
109 /// Tag type for the binary ->* operator.
112 /// Tag type for the binary = operator.
115 /// Tag type for the binary \<\<= operator.
116 struct shift_left_assign
{};
118 /// Tag type for the binary \>\>= operator.
119 struct shift_right_assign
{};
121 /// Tag type for the binary *= operator.
122 struct multiplies_assign
{};
124 /// Tag type for the binary /= operator.
125 struct divides_assign
{};
127 /// Tag type for the binary %= operator.
128 struct modulus_assign
{};
130 /// Tag type for the binary += operator.
131 struct plus_assign
{};
133 /// Tag type for the binary -= operator.
134 struct minus_assign
{};
136 /// Tag type for the binary &= operator.
137 struct bitwise_and_assign
{};
139 /// Tag type for the binary |= operator.
140 struct bitwise_or_assign
{};
142 /// Tag type for the binary ^= operator.
143 struct bitwise_xor_assign
{};
145 /// Tag type for the binary subscript operator.
148 /// Tag type for the binary virtual data members.
151 /// Tag type for the ternary ?: conditional operator.
154 /// Tag type for the n-ary function call operator.