make_expr_funop.hpp 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. ///////////////////////////////////////////////////////////////////////////////
  2. /// \file make_expr_funop.hpp
  3. /// Contains definition of make_expr\<\>::operator() member functions.
  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 This , typename A0 , typename A1>
  9. struct result<This(A0 , A1)>
  10. {
  11. typedef
  12. typename result_of::make_expr<
  13. Tag
  14. , Domain
  15. , A0 , A1
  16. >::type
  17. type;
  18. };
  19. template<typename A0 , typename A1>
  20. BOOST_FORCEINLINE
  21. typename result_of::make_expr<
  22. Tag
  23. , Domain
  24. , const A0 , const A1
  25. >::type const
  26. operator ()(const A0 &a0 , const A1 &a1) const
  27. {
  28. return proto::detail::make_expr_<
  29. Tag
  30. , Domain
  31. , const A0 , const A1
  32. >()(a0 , a1);
  33. }
  34. template<typename This , typename A0 , typename A1 , typename A2>
  35. struct result<This(A0 , A1 , A2)>
  36. {
  37. typedef
  38. typename result_of::make_expr<
  39. Tag
  40. , Domain
  41. , A0 , A1 , A2
  42. >::type
  43. type;
  44. };
  45. template<typename A0 , typename A1 , typename A2>
  46. BOOST_FORCEINLINE
  47. typename result_of::make_expr<
  48. Tag
  49. , Domain
  50. , const A0 , const A1 , const A2
  51. >::type const
  52. operator ()(const A0 &a0 , const A1 &a1 , const A2 &a2) const
  53. {
  54. return proto::detail::make_expr_<
  55. Tag
  56. , Domain
  57. , const A0 , const A1 , const A2
  58. >()(a0 , a1 , a2);
  59. }
  60. template<typename This , typename A0 , typename A1 , typename A2 , typename A3>
  61. struct result<This(A0 , A1 , A2 , A3)>
  62. {
  63. typedef
  64. typename result_of::make_expr<
  65. Tag
  66. , Domain
  67. , A0 , A1 , A2 , A3
  68. >::type
  69. type;
  70. };
  71. template<typename A0 , typename A1 , typename A2 , typename A3>
  72. BOOST_FORCEINLINE
  73. typename result_of::make_expr<
  74. Tag
  75. , Domain
  76. , const A0 , const A1 , const A2 , const A3
  77. >::type const
  78. operator ()(const A0 &a0 , const A1 &a1 , const A2 &a2 , const A3 &a3) const
  79. {
  80. return proto::detail::make_expr_<
  81. Tag
  82. , Domain
  83. , const A0 , const A1 , const A2 , const A3
  84. >()(a0 , a1 , a2 , a3);
  85. }
  86. template<typename This , typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
  87. struct result<This(A0 , A1 , A2 , A3 , A4)>
  88. {
  89. typedef
  90. typename result_of::make_expr<
  91. Tag
  92. , Domain
  93. , A0 , A1 , A2 , A3 , A4
  94. >::type
  95. type;
  96. };
  97. template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
  98. BOOST_FORCEINLINE
  99. typename result_of::make_expr<
  100. Tag
  101. , Domain
  102. , const A0 , const A1 , const A2 , const A3 , const A4
  103. >::type const
  104. operator ()(const A0 &a0 , const A1 &a1 , const A2 &a2 , const A3 &a3 , const A4 &a4) const
  105. {
  106. return proto::detail::make_expr_<
  107. Tag
  108. , Domain
  109. , const A0 , const A1 , const A2 , const A3 , const A4
  110. >()(a0 , a1 , a2 , a3 , a4);
  111. }
  112. template<typename This , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
  113. struct result<This(A0 , A1 , A2 , A3 , A4 , A5)>
  114. {
  115. typedef
  116. typename result_of::make_expr<
  117. Tag
  118. , Domain
  119. , A0 , A1 , A2 , A3 , A4 , A5
  120. >::type
  121. type;
  122. };
  123. template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
  124. BOOST_FORCEINLINE
  125. typename result_of::make_expr<
  126. Tag
  127. , Domain
  128. , const A0 , const A1 , const A2 , const A3 , const A4 , const A5
  129. >::type const
  130. operator ()(const A0 &a0 , const A1 &a1 , const A2 &a2 , const A3 &a3 , const A4 &a4 , const A5 &a5) const
  131. {
  132. return proto::detail::make_expr_<
  133. Tag
  134. , Domain
  135. , const A0 , const A1 , const A2 , const A3 , const A4 , const A5
  136. >()(a0 , a1 , a2 , a3 , a4 , a5);
  137. }
  138. template<typename This , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
  139. struct result<This(A0 , A1 , A2 , A3 , A4 , A5 , A6)>
  140. {
  141. typedef
  142. typename result_of::make_expr<
  143. Tag
  144. , Domain
  145. , A0 , A1 , A2 , A3 , A4 , A5 , A6
  146. >::type
  147. type;
  148. };
  149. template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
  150. BOOST_FORCEINLINE
  151. typename result_of::make_expr<
  152. Tag
  153. , Domain
  154. , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6
  155. >::type const
  156. operator ()(const A0 &a0 , const A1 &a1 , const A2 &a2 , const A3 &a3 , const A4 &a4 , const A5 &a5 , const A6 &a6) const
  157. {
  158. return proto::detail::make_expr_<
  159. Tag
  160. , Domain
  161. , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6
  162. >()(a0 , a1 , a2 , a3 , a4 , a5 , a6);
  163. }
  164. template<typename This , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
  165. struct result<This(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7)>
  166. {
  167. typedef
  168. typename result_of::make_expr<
  169. Tag
  170. , Domain
  171. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
  172. >::type
  173. type;
  174. };
  175. template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
  176. BOOST_FORCEINLINE
  177. typename result_of::make_expr<
  178. Tag
  179. , Domain
  180. , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7
  181. >::type const
  182. operator ()(const A0 &a0 , const A1 &a1 , const A2 &a2 , const A3 &a3 , const A4 &a4 , const A5 &a5 , const A6 &a6 , const A7 &a7) const
  183. {
  184. return proto::detail::make_expr_<
  185. Tag
  186. , Domain
  187. , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7
  188. >()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7);
  189. }
  190. template<typename This , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
  191. struct result<This(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8)>
  192. {
  193. typedef
  194. typename result_of::make_expr<
  195. Tag
  196. , Domain
  197. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
  198. >::type
  199. type;
  200. };
  201. template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
  202. BOOST_FORCEINLINE
  203. typename result_of::make_expr<
  204. Tag
  205. , Domain
  206. , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8
  207. >::type const
  208. operator ()(const A0 &a0 , const A1 &a1 , const A2 &a2 , const A3 &a3 , const A4 &a4 , const A5 &a5 , const A6 &a6 , const A7 &a7 , const A8 &a8) const
  209. {
  210. return proto::detail::make_expr_<
  211. Tag
  212. , Domain
  213. , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8
  214. >()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8);
  215. }
  216. template<typename This , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
  217. struct result<This(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9)>
  218. {
  219. typedef
  220. typename result_of::make_expr<
  221. Tag
  222. , Domain
  223. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9
  224. >::type
  225. type;
  226. };
  227. template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
  228. BOOST_FORCEINLINE
  229. typename result_of::make_expr<
  230. Tag
  231. , Domain
  232. , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8 , const A9
  233. >::type const
  234. operator ()(const A0 &a0 , const A1 &a1 , const A2 &a2 , const A3 &a3 , const A4 &a4 , const A5 &a5 , const A6 &a6 , const A7 &a7 , const A8 &a8 , const A9 &a9) const
  235. {
  236. return proto::detail::make_expr_<
  237. Tag
  238. , Domain
  239. , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8 , const A9
  240. >()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9);
  241. }