vararg_matches_impl.hpp 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. ///////////////////////////////////////////////////////////////////////////////
  2. /// \file vararg_matches_impl.hpp
  3. /// Specializations of the vararg_matches_impl template
  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. template<typename Args, typename Back, long To>
  9. struct vararg_matches_impl<Args, Back, 2, To>
  10. : and_2<
  11. matches_<
  12. typename detail::expr_traits<typename Args::child1>::value_type::proto_derived_expr
  13. , typename detail::expr_traits<typename Args::child1>::value_type::proto_grammar
  14. , Back
  15. >::value
  16. , vararg_matches_impl<Args, Back, 2 + 1, To>
  17. >
  18. {};
  19. template<typename Args, typename Back>
  20. struct vararg_matches_impl<Args, Back, 2, 2>
  21. : matches_<
  22. typename detail::expr_traits<typename Args::child1>::value_type::proto_derived_expr
  23. , typename detail::expr_traits<typename Args::child1>::value_type::proto_grammar
  24. , Back
  25. >
  26. {};
  27. template<typename Args, typename Back, long To>
  28. struct vararg_matches_impl<Args, Back, 3, To>
  29. : and_2<
  30. matches_<
  31. typename detail::expr_traits<typename Args::child2>::value_type::proto_derived_expr
  32. , typename detail::expr_traits<typename Args::child2>::value_type::proto_grammar
  33. , Back
  34. >::value
  35. , vararg_matches_impl<Args, Back, 3 + 1, To>
  36. >
  37. {};
  38. template<typename Args, typename Back>
  39. struct vararg_matches_impl<Args, Back, 3, 3>
  40. : matches_<
  41. typename detail::expr_traits<typename Args::child2>::value_type::proto_derived_expr
  42. , typename detail::expr_traits<typename Args::child2>::value_type::proto_grammar
  43. , Back
  44. >
  45. {};
  46. template<typename Args, typename Back, long To>
  47. struct vararg_matches_impl<Args, Back, 4, To>
  48. : and_2<
  49. matches_<
  50. typename detail::expr_traits<typename Args::child3>::value_type::proto_derived_expr
  51. , typename detail::expr_traits<typename Args::child3>::value_type::proto_grammar
  52. , Back
  53. >::value
  54. , vararg_matches_impl<Args, Back, 4 + 1, To>
  55. >
  56. {};
  57. template<typename Args, typename Back>
  58. struct vararg_matches_impl<Args, Back, 4, 4>
  59. : matches_<
  60. typename detail::expr_traits<typename Args::child3>::value_type::proto_derived_expr
  61. , typename detail::expr_traits<typename Args::child3>::value_type::proto_grammar
  62. , Back
  63. >
  64. {};
  65. template<typename Args, typename Back, long To>
  66. struct vararg_matches_impl<Args, Back, 5, To>
  67. : and_2<
  68. matches_<
  69. typename detail::expr_traits<typename Args::child4>::value_type::proto_derived_expr
  70. , typename detail::expr_traits<typename Args::child4>::value_type::proto_grammar
  71. , Back
  72. >::value
  73. , vararg_matches_impl<Args, Back, 5 + 1, To>
  74. >
  75. {};
  76. template<typename Args, typename Back>
  77. struct vararg_matches_impl<Args, Back, 5, 5>
  78. : matches_<
  79. typename detail::expr_traits<typename Args::child4>::value_type::proto_derived_expr
  80. , typename detail::expr_traits<typename Args::child4>::value_type::proto_grammar
  81. , Back
  82. >
  83. {};
  84. template<typename Args, typename Back, long To>
  85. struct vararg_matches_impl<Args, Back, 6, To>
  86. : and_2<
  87. matches_<
  88. typename detail::expr_traits<typename Args::child5>::value_type::proto_derived_expr
  89. , typename detail::expr_traits<typename Args::child5>::value_type::proto_grammar
  90. , Back
  91. >::value
  92. , vararg_matches_impl<Args, Back, 6 + 1, To>
  93. >
  94. {};
  95. template<typename Args, typename Back>
  96. struct vararg_matches_impl<Args, Back, 6, 6>
  97. : matches_<
  98. typename detail::expr_traits<typename Args::child5>::value_type::proto_derived_expr
  99. , typename detail::expr_traits<typename Args::child5>::value_type::proto_grammar
  100. , Back
  101. >
  102. {};
  103. template<typename Args, typename Back, long To>
  104. struct vararg_matches_impl<Args, Back, 7, To>
  105. : and_2<
  106. matches_<
  107. typename detail::expr_traits<typename Args::child6>::value_type::proto_derived_expr
  108. , typename detail::expr_traits<typename Args::child6>::value_type::proto_grammar
  109. , Back
  110. >::value
  111. , vararg_matches_impl<Args, Back, 7 + 1, To>
  112. >
  113. {};
  114. template<typename Args, typename Back>
  115. struct vararg_matches_impl<Args, Back, 7, 7>
  116. : matches_<
  117. typename detail::expr_traits<typename Args::child6>::value_type::proto_derived_expr
  118. , typename detail::expr_traits<typename Args::child6>::value_type::proto_grammar
  119. , Back
  120. >
  121. {};
  122. template<typename Args, typename Back, long To>
  123. struct vararg_matches_impl<Args, Back, 8, To>
  124. : and_2<
  125. matches_<
  126. typename detail::expr_traits<typename Args::child7>::value_type::proto_derived_expr
  127. , typename detail::expr_traits<typename Args::child7>::value_type::proto_grammar
  128. , Back
  129. >::value
  130. , vararg_matches_impl<Args, Back, 8 + 1, To>
  131. >
  132. {};
  133. template<typename Args, typename Back>
  134. struct vararg_matches_impl<Args, Back, 8, 8>
  135. : matches_<
  136. typename detail::expr_traits<typename Args::child7>::value_type::proto_derived_expr
  137. , typename detail::expr_traits<typename Args::child7>::value_type::proto_grammar
  138. , Back
  139. >
  140. {};
  141. template<typename Args, typename Back, long To>
  142. struct vararg_matches_impl<Args, Back, 9, To>
  143. : and_2<
  144. matches_<
  145. typename detail::expr_traits<typename Args::child8>::value_type::proto_derived_expr
  146. , typename detail::expr_traits<typename Args::child8>::value_type::proto_grammar
  147. , Back
  148. >::value
  149. , vararg_matches_impl<Args, Back, 9 + 1, To>
  150. >
  151. {};
  152. template<typename Args, typename Back>
  153. struct vararg_matches_impl<Args, Back, 9, 9>
  154. : matches_<
  155. typename detail::expr_traits<typename Args::child8>::value_type::proto_derived_expr
  156. , typename detail::expr_traits<typename Args::child8>::value_type::proto_grammar
  157. , Back
  158. >
  159. {};
  160. template<typename Args, typename Back, long To>
  161. struct vararg_matches_impl<Args, Back, 10, To>
  162. : and_2<
  163. matches_<
  164. typename detail::expr_traits<typename Args::child9>::value_type::proto_derived_expr
  165. , typename detail::expr_traits<typename Args::child9>::value_type::proto_grammar
  166. , Back
  167. >::value
  168. , vararg_matches_impl<Args, Back, 10 + 1, To>
  169. >
  170. {};
  171. template<typename Args, typename Back>
  172. struct vararg_matches_impl<Args, Back, 10, 10>
  173. : matches_<
  174. typename detail::expr_traits<typename Args::child9>::value_type::proto_derived_expr
  175. , typename detail::expr_traits<typename Args::child9>::value_type::proto_grammar
  176. , Back
  177. >
  178. {};