tags.hpp 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  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. #ifndef BOOST_PROTO_TAGS_HPP_EAN_04_01_2005
  9. #define BOOST_PROTO_TAGS_HPP_EAN_04_01_2005
  10. #include <boost/proto/proto_fwd.hpp>
  11. namespace boost { namespace proto { namespace tagns_ { namespace tag
  12. {
  13. /// Tag type for terminals; aka, leaves in the expression tree.
  14. struct terminal {};
  15. /// Tag type for the unary + operator.
  16. struct unary_plus {};
  17. /// Tag type for the unary - operator.
  18. struct negate {};
  19. /// Tag type for the unary * operator.
  20. struct dereference {};
  21. /// Tag type for the unary ~ operator.
  22. struct complement {};
  23. /// Tag type for the unary & operator.
  24. struct address_of {};
  25. /// Tag type for the unary ! operator.
  26. struct logical_not {};
  27. /// Tag type for the unary prefix ++ operator.
  28. struct pre_inc {};
  29. /// Tag type for the unary prefix -- operator.
  30. struct pre_dec {};
  31. /// Tag type for the unary postfix ++ operator.
  32. struct post_inc {};
  33. /// Tag type for the unary postfix -- operator.
  34. struct post_dec {};
  35. /// Tag type for the binary \<\< operator.
  36. struct shift_left {};
  37. /// Tag type for the binary \>\> operator.
  38. struct shift_right {};
  39. /// Tag type for the binary * operator.
  40. struct multiplies {};
  41. /// Tag type for the binary / operator.
  42. struct divides {};
  43. /// Tag type for the binary % operator.
  44. struct modulus {};
  45. /// Tag type for the binary + operator.
  46. struct plus {};
  47. /// Tag type for the binary - operator.
  48. struct minus {};
  49. /// Tag type for the binary \< operator.
  50. struct less {};
  51. /// Tag type for the binary \> operator.
  52. struct greater {};
  53. /// Tag type for the binary \<= operator.
  54. struct less_equal {};
  55. /// Tag type for the binary \>= operator.
  56. struct greater_equal {};
  57. /// Tag type for the binary == operator.
  58. struct equal_to {};
  59. /// Tag type for the binary != operator.
  60. struct not_equal_to {};
  61. /// Tag type for the binary || operator.
  62. struct logical_or {};
  63. /// Tag type for the binary && operator.
  64. struct logical_and {};
  65. /// Tag type for the binary & operator.
  66. struct bitwise_and {};
  67. /// Tag type for the binary | operator.
  68. struct bitwise_or {};
  69. /// Tag type for the binary ^ operator.
  70. struct bitwise_xor {};
  71. /// Tag type for the binary , operator.
  72. struct comma {};
  73. /// Tag type for the binary ->* operator.
  74. struct mem_ptr {};
  75. /// Tag type for the binary = operator.
  76. struct assign {};
  77. /// Tag type for the binary \<\<= operator.
  78. struct shift_left_assign {};
  79. /// Tag type for the binary \>\>= operator.
  80. struct shift_right_assign {};
  81. /// Tag type for the binary *= operator.
  82. struct multiplies_assign {};
  83. /// Tag type for the binary /= operator.
  84. struct divides_assign {};
  85. /// Tag type for the binary %= operator.
  86. struct modulus_assign {};
  87. /// Tag type for the binary += operator.
  88. struct plus_assign {};
  89. /// Tag type for the binary -= operator.
  90. struct minus_assign {};
  91. /// Tag type for the binary &= operator.
  92. struct bitwise_and_assign {};
  93. /// Tag type for the binary |= operator.
  94. struct bitwise_or_assign {};
  95. /// Tag type for the binary ^= operator.
  96. struct bitwise_xor_assign {};
  97. /// Tag type for the binary subscript operator.
  98. struct subscript {};
  99. /// Tag type for the binary virtual data members.
  100. struct member {};
  101. /// Tag type for the ternary ?: conditional operator.
  102. struct if_else_ {};
  103. /// Tag type for the n-ary function call operator.
  104. struct function {};
  105. }}}}
  106. #endif