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