/Src/Dependencies/Boost/boost/proto/detail/preprocessed/make_expr.hpp

http://hadesmem.googlecode.com/ · C++ Header · 313 lines · 270 code · 36 blank · 7 comment · 0 complexity · 71eb9bd34ef81411d9010df6cc05e1f1 MD5 · raw file

  1. ///////////////////////////////////////////////////////////////////////////////
  2. /// \file make_expr.hpp
  3. /// Contains overloads of make_expr() free function.
  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 Tag , typename A0 , typename A1>
  9. typename lazy_disable_if<
  10. is_domain<A0>
  11. , result_of::make_expr<
  12. Tag
  13. , const A0 , const A1
  14. >
  15. >::type const
  16. make_expr(const A0 &a0 , const A1 &a1)
  17. {
  18. return proto::detail::make_expr_<
  19. Tag
  20. , deduce_domain
  21. , const A0 , const A1
  22. >()(a0 , a1);
  23. }
  24. template<typename Tag, typename Domain , typename C0 , typename C1>
  25. typename result_of::make_expr<
  26. Tag
  27. , Domain
  28. , const C0 , const C1
  29. >::type const
  30. make_expr(const C0 &c0 , const C1 &c1)
  31. {
  32. return proto::detail::make_expr_<
  33. Tag
  34. , Domain
  35. , const C0 , const C1
  36. >()(c0 , c1);
  37. }
  38. template<typename Tag , typename A0 , typename A1 , typename A2>
  39. typename lazy_disable_if<
  40. is_domain<A0>
  41. , result_of::make_expr<
  42. Tag
  43. , const A0 , const A1 , const A2
  44. >
  45. >::type const
  46. make_expr(const A0 &a0 , const A1 &a1 , const A2 &a2)
  47. {
  48. return proto::detail::make_expr_<
  49. Tag
  50. , deduce_domain
  51. , const A0 , const A1 , const A2
  52. >()(a0 , a1 , a2);
  53. }
  54. template<typename Tag, typename Domain , typename C0 , typename C1 , typename C2>
  55. typename result_of::make_expr<
  56. Tag
  57. , Domain
  58. , const C0 , const C1 , const C2
  59. >::type const
  60. make_expr(const C0 &c0 , const C1 &c1 , const C2 &c2)
  61. {
  62. return proto::detail::make_expr_<
  63. Tag
  64. , Domain
  65. , const C0 , const C1 , const C2
  66. >()(c0 , c1 , c2);
  67. }
  68. template<typename Tag , typename A0 , typename A1 , typename A2 , typename A3>
  69. typename lazy_disable_if<
  70. is_domain<A0>
  71. , result_of::make_expr<
  72. Tag
  73. , const A0 , const A1 , const A2 , const A3
  74. >
  75. >::type const
  76. make_expr(const A0 &a0 , const A1 &a1 , const A2 &a2 , const A3 &a3)
  77. {
  78. return proto::detail::make_expr_<
  79. Tag
  80. , deduce_domain
  81. , const A0 , const A1 , const A2 , const A3
  82. >()(a0 , a1 , a2 , a3);
  83. }
  84. template<typename Tag, typename Domain , typename C0 , typename C1 , typename C2 , typename C3>
  85. typename result_of::make_expr<
  86. Tag
  87. , Domain
  88. , const C0 , const C1 , const C2 , const C3
  89. >::type const
  90. make_expr(const C0 &c0 , const C1 &c1 , const C2 &c2 , const C3 &c3)
  91. {
  92. return proto::detail::make_expr_<
  93. Tag
  94. , Domain
  95. , const C0 , const C1 , const C2 , const C3
  96. >()(c0 , c1 , c2 , c3);
  97. }
  98. template<typename Tag , typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
  99. typename lazy_disable_if<
  100. is_domain<A0>
  101. , result_of::make_expr<
  102. Tag
  103. , const A0 , const A1 , const A2 , const A3 , const A4
  104. >
  105. >::type const
  106. make_expr(const A0 &a0 , const A1 &a1 , const A2 &a2 , const A3 &a3 , const A4 &a4)
  107. {
  108. return proto::detail::make_expr_<
  109. Tag
  110. , deduce_domain
  111. , const A0 , const A1 , const A2 , const A3 , const A4
  112. >()(a0 , a1 , a2 , a3 , a4);
  113. }
  114. template<typename Tag, typename Domain , typename C0 , typename C1 , typename C2 , typename C3 , typename C4>
  115. typename result_of::make_expr<
  116. Tag
  117. , Domain
  118. , const C0 , const C1 , const C2 , const C3 , const C4
  119. >::type const
  120. make_expr(const C0 &c0 , const C1 &c1 , const C2 &c2 , const C3 &c3 , const C4 &c4)
  121. {
  122. return proto::detail::make_expr_<
  123. Tag
  124. , Domain
  125. , const C0 , const C1 , const C2 , const C3 , const C4
  126. >()(c0 , c1 , c2 , c3 , c4);
  127. }
  128. template<typename Tag , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
  129. typename lazy_disable_if<
  130. is_domain<A0>
  131. , result_of::make_expr<
  132. Tag
  133. , const A0 , const A1 , const A2 , const A3 , const A4 , const A5
  134. >
  135. >::type const
  136. make_expr(const A0 &a0 , const A1 &a1 , const A2 &a2 , const A3 &a3 , const A4 &a4 , const A5 &a5)
  137. {
  138. return proto::detail::make_expr_<
  139. Tag
  140. , deduce_domain
  141. , const A0 , const A1 , const A2 , const A3 , const A4 , const A5
  142. >()(a0 , a1 , a2 , a3 , a4 , a5);
  143. }
  144. template<typename Tag, typename Domain , typename C0 , typename C1 , typename C2 , typename C3 , typename C4 , typename C5>
  145. typename result_of::make_expr<
  146. Tag
  147. , Domain
  148. , const C0 , const C1 , const C2 , const C3 , const C4 , const C5
  149. >::type const
  150. make_expr(const C0 &c0 , const C1 &c1 , const C2 &c2 , const C3 &c3 , const C4 &c4 , const C5 &c5)
  151. {
  152. return proto::detail::make_expr_<
  153. Tag
  154. , Domain
  155. , const C0 , const C1 , const C2 , const C3 , const C4 , const C5
  156. >()(c0 , c1 , c2 , c3 , c4 , c5);
  157. }
  158. template<typename Tag , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
  159. typename lazy_disable_if<
  160. is_domain<A0>
  161. , result_of::make_expr<
  162. Tag
  163. , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6
  164. >
  165. >::type const
  166. make_expr(const A0 &a0 , const A1 &a1 , const A2 &a2 , const A3 &a3 , const A4 &a4 , const A5 &a5 , const A6 &a6)
  167. {
  168. return proto::detail::make_expr_<
  169. Tag
  170. , deduce_domain
  171. , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6
  172. >()(a0 , a1 , a2 , a3 , a4 , a5 , a6);
  173. }
  174. template<typename Tag, typename Domain , typename C0 , typename C1 , typename C2 , typename C3 , typename C4 , typename C5 , typename C6>
  175. typename result_of::make_expr<
  176. Tag
  177. , Domain
  178. , const C0 , const C1 , const C2 , const C3 , const C4 , const C5 , const C6
  179. >::type const
  180. make_expr(const C0 &c0 , const C1 &c1 , const C2 &c2 , const C3 &c3 , const C4 &c4 , const C5 &c5 , const C6 &c6)
  181. {
  182. return proto::detail::make_expr_<
  183. Tag
  184. , Domain
  185. , const C0 , const C1 , const C2 , const C3 , const C4 , const C5 , const C6
  186. >()(c0 , c1 , c2 , c3 , c4 , c5 , c6);
  187. }
  188. template<typename Tag , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
  189. typename lazy_disable_if<
  190. is_domain<A0>
  191. , result_of::make_expr<
  192. Tag
  193. , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7
  194. >
  195. >::type const
  196. make_expr(const A0 &a0 , const A1 &a1 , const A2 &a2 , const A3 &a3 , const A4 &a4 , const A5 &a5 , const A6 &a6 , const A7 &a7)
  197. {
  198. return proto::detail::make_expr_<
  199. Tag
  200. , deduce_domain
  201. , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7
  202. >()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7);
  203. }
  204. template<typename Tag, typename Domain , typename C0 , typename C1 , typename C2 , typename C3 , typename C4 , typename C5 , typename C6 , typename C7>
  205. typename result_of::make_expr<
  206. Tag
  207. , Domain
  208. , const C0 , const C1 , const C2 , const C3 , const C4 , const C5 , const C6 , const C7
  209. >::type const
  210. make_expr(const C0 &c0 , const C1 &c1 , const C2 &c2 , const C3 &c3 , const C4 &c4 , const C5 &c5 , const C6 &c6 , const C7 &c7)
  211. {
  212. return proto::detail::make_expr_<
  213. Tag
  214. , Domain
  215. , const C0 , const C1 , const C2 , const C3 , const C4 , const C5 , const C6 , const C7
  216. >()(c0 , c1 , c2 , c3 , c4 , c5 , c6 , c7);
  217. }
  218. template<typename Tag , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
  219. typename lazy_disable_if<
  220. is_domain<A0>
  221. , result_of::make_expr<
  222. Tag
  223. , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8
  224. >
  225. >::type const
  226. make_expr(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)
  227. {
  228. return proto::detail::make_expr_<
  229. Tag
  230. , deduce_domain
  231. , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8
  232. >()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8);
  233. }
  234. template<typename Tag, typename Domain , typename C0 , typename C1 , typename C2 , typename C3 , typename C4 , typename C5 , typename C6 , typename C7 , typename C8>
  235. typename result_of::make_expr<
  236. Tag
  237. , Domain
  238. , const C0 , const C1 , const C2 , const C3 , const C4 , const C5 , const C6 , const C7 , const C8
  239. >::type const
  240. make_expr(const C0 &c0 , const C1 &c1 , const C2 &c2 , const C3 &c3 , const C4 &c4 , const C5 &c5 , const C6 &c6 , const C7 &c7 , const C8 &c8)
  241. {
  242. return proto::detail::make_expr_<
  243. Tag
  244. , Domain
  245. , const C0 , const C1 , const C2 , const C3 , const C4 , const C5 , const C6 , const C7 , const C8
  246. >()(c0 , c1 , c2 , c3 , c4 , c5 , c6 , c7 , c8);
  247. }
  248. template<typename Tag , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
  249. typename lazy_disable_if<
  250. is_domain<A0>
  251. , result_of::make_expr<
  252. Tag
  253. , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8 , const A9
  254. >
  255. >::type const
  256. make_expr(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)
  257. {
  258. return proto::detail::make_expr_<
  259. Tag
  260. , deduce_domain
  261. , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8 , const A9
  262. >()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9);
  263. }
  264. template<typename Tag, typename Domain , typename C0 , typename C1 , typename C2 , typename C3 , typename C4 , typename C5 , typename C6 , typename C7 , typename C8 , typename C9>
  265. typename result_of::make_expr<
  266. Tag
  267. , Domain
  268. , const C0 , const C1 , const C2 , const C3 , const C4 , const C5 , const C6 , const C7 , const C8 , const C9
  269. >::type const
  270. make_expr(const C0 &c0 , const C1 &c1 , const C2 &c2 , const C3 &c3 , const C4 &c4 , const C5 &c5 , const C6 &c6 , const C7 &c7 , const C8 &c8 , const C9 &c9)
  271. {
  272. return proto::detail::make_expr_<
  273. Tag
  274. , Domain
  275. , const C0 , const C1 , const C2 , const C3 , const C4 , const C5 , const C6 , const C7 , const C8 , const C9
  276. >()(c0 , c1 , c2 , c3 , c4 , c5 , c6 , c7 , c8 , c9);
  277. }