1 ///////////////////////////////////////////////////////////////////////////////
2 /// \file tags.hpp
3 /// Contains the tags for all the overloadable operators in C++
4 //
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)
8 
9 #ifndef BOOST_PROTO_TAGS_HPP_EAN_04_01_2005
10 #define BOOST_PROTO_TAGS_HPP_EAN_04_01_2005
11 
12 #include <boost/proto/proto_fwd.hpp>
13 
14 namespace boost { namespace proto { namespace tagns_ { namespace tag
15 {
16 
17     /// Tag type for terminals; aka, leaves in the expression tree.
18     struct terminal {};
19 
20     /// Tag type for the unary + operator.
21     struct unary_plus {};
22 
23     /// Tag type for the unary - operator.
24     struct negate {};
25 
26     /// Tag type for the unary * operator.
27     struct dereference {};
28 
29     /// Tag type for the unary ~ operator.
30     struct complement {};
31 
32     /// Tag type for the unary & operator.
33     struct address_of {};
34 
35     /// Tag type for the unary ! operator.
36     struct logical_not {};
37 
38     /// Tag type for the unary prefix ++ operator.
39     struct pre_inc {};
40 
41     /// Tag type for the unary prefix -- operator.
42     struct pre_dec {};
43 
44     /// Tag type for the unary postfix ++ operator.
45     struct post_inc {};
46 
47     /// Tag type for the unary postfix -- operator.
48     struct post_dec {};
49 
50     /// Tag type for the binary \<\< operator.
51     struct shift_left {};
52 
53     /// Tag type for the binary \>\> operator.
54     struct shift_right {};
55 
56     /// Tag type for the binary * operator.
57     struct multiplies {};
58 
59     /// Tag type for the binary / operator.
60     struct divides {};
61 
62     /// Tag type for the binary % operator.
63     struct modulus {};
64 
65     /// Tag type for the binary + operator.
66     struct plus {};
67 
68     /// Tag type for the binary - operator.
69     struct minus {};
70 
71     /// Tag type for the binary \< operator.
72     struct less {};
73 
74     /// Tag type for the binary \> operator.
75     struct greater {};
76 
77     /// Tag type for the binary \<= operator.
78     struct less_equal {};
79 
80     /// Tag type for the binary \>= operator.
81     struct greater_equal {};
82 
83     /// Tag type for the binary == operator.
84     struct equal_to {};
85 
86     /// Tag type for the binary != operator.
87     struct not_equal_to {};
88 
89     /// Tag type for the binary || operator.
90     struct logical_or {};
91 
92     /// Tag type for the binary && operator.
93     struct logical_and {};
94 
95     /// Tag type for the binary & operator.
96     struct bitwise_and {};
97 
98     /// Tag type for the binary | operator.
99     struct bitwise_or {};
100 
101     /// Tag type for the binary ^ operator.
102     struct bitwise_xor {};
103 
104     /// Tag type for the binary , operator.
105     struct comma {};
106 
107     /// Tag type for the binary ->* operator.
108     struct mem_ptr {};
109 
110     /// Tag type for the binary = operator.
111     struct assign {};
112 
113     /// Tag type for the binary \<\<= operator.
114     struct shift_left_assign {};
115 
116     /// Tag type for the binary \>\>= operator.
117     struct shift_right_assign {};
118 
119     /// Tag type for the binary *= operator.
120     struct multiplies_assign {};
121 
122     /// Tag type for the binary /= operator.
123     struct divides_assign {};
124 
125     /// Tag type for the binary %= operator.
126     struct modulus_assign {};
127 
128     /// Tag type for the binary += operator.
129     struct plus_assign {};
130 
131     /// Tag type for the binary -= operator.
132     struct minus_assign {};
133 
134     /// Tag type for the binary &= operator.
135     struct bitwise_and_assign {};
136 
137     /// Tag type for the binary |= operator.
138     struct bitwise_or_assign {};
139 
140     /// Tag type for the binary ^= operator.
141     struct bitwise_xor_assign {};
142 
143     /// Tag type for the binary subscript operator.
144     struct subscript {};
145 
146     /// Tag type for the binary virtual data members.
147     struct member {};
148 
149     /// Tag type for the ternary ?: conditional operator.
150     struct if_else_ {};
151 
152     /// Tag type for the n-ary function call operator.
153     struct function {};
154 
155 }}}}
156 
157 #endif
158