function_eval_10.hpp 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457
  1. /*=============================================================================
  2. Copyright (c) 2001-2007 Joel de Guzman
  3. Distributed under the Boost Software License, Version 1.0. (See accompanying
  4. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  5. ==============================================================================*/
  6. template <
  7. typename This
  8. , typename F
  9. , typename A0
  10. , typename Context
  11. >
  12. struct result<This(F, A0, Context)>
  13. {
  14. typedef typename
  15. remove_reference<
  16. typename boost::result_of<evaluator(F, Context)>::type
  17. >::type
  18. fn;
  19. typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0;
  20. typedef typename
  21. boost::result_of<fn(a0)>::type
  22. type;
  23. };
  24. template <typename F, typename A0, typename Context>
  25. typename result<
  26. function_eval(
  27. F const &
  28. , A0 &
  29. , Context const &
  30. )
  31. >::type
  32. operator()(F const & f, A0 & a0, Context const & ctx) const
  33. {
  34. return boost::phoenix::eval(f, ctx)(help_rvalue_deduction(boost::phoenix::eval(a0, ctx)));
  35. }
  36. template <typename F, typename A0, typename Context>
  37. typename result<
  38. function_eval(
  39. F &
  40. , A0 &
  41. , Context const &
  42. )
  43. >::type
  44. operator()(F & f, A0 & a0, Context const & ctx) const
  45. {
  46. return boost::phoenix::eval(f, ctx)(help_rvalue_deduction(boost::phoenix::eval(a0, ctx)));
  47. }
  48. template <
  49. typename This
  50. , typename F
  51. , typename A0 , typename A1
  52. , typename Context
  53. >
  54. struct result<This(F, A0 , A1, Context)>
  55. {
  56. typedef typename
  57. remove_reference<
  58. typename boost::result_of<evaluator(F, Context)>::type
  59. >::type
  60. fn;
  61. typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1;
  62. typedef typename
  63. boost::result_of<fn(a0 , a1)>::type
  64. type;
  65. };
  66. template <typename F, typename A0 , typename A1, typename Context>
  67. typename result<
  68. function_eval(
  69. F const &
  70. , A0 & , A1 &
  71. , Context const &
  72. )
  73. >::type
  74. operator()(F const & f, A0 & a0 , A1 & a1, Context const & ctx) const
  75. {
  76. return boost::phoenix::eval(f, ctx)(help_rvalue_deduction(boost::phoenix::eval(a0, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a1, ctx)));
  77. }
  78. template <typename F, typename A0 , typename A1, typename Context>
  79. typename result<
  80. function_eval(
  81. F &
  82. , A0 & , A1 &
  83. , Context const &
  84. )
  85. >::type
  86. operator()(F & f, A0 & a0 , A1 & a1, Context const & ctx) const
  87. {
  88. return boost::phoenix::eval(f, ctx)(help_rvalue_deduction(boost::phoenix::eval(a0, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a1, ctx)));
  89. }
  90. template <
  91. typename This
  92. , typename F
  93. , typename A0 , typename A1 , typename A2
  94. , typename Context
  95. >
  96. struct result<This(F, A0 , A1 , A2, Context)>
  97. {
  98. typedef typename
  99. remove_reference<
  100. typename boost::result_of<evaluator(F, Context)>::type
  101. >::type
  102. fn;
  103. typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2;
  104. typedef typename
  105. boost::result_of<fn(a0 , a1 , a2)>::type
  106. type;
  107. };
  108. template <typename F, typename A0 , typename A1 , typename A2, typename Context>
  109. typename result<
  110. function_eval(
  111. F const &
  112. , A0 & , A1 & , A2 &
  113. , Context const &
  114. )
  115. >::type
  116. operator()(F const & f, A0 & a0 , A1 & a1 , A2 & a2, Context const & ctx) const
  117. {
  118. return boost::phoenix::eval(f, ctx)(help_rvalue_deduction(boost::phoenix::eval(a0, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a1, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a2, ctx)));
  119. }
  120. template <typename F, typename A0 , typename A1 , typename A2, typename Context>
  121. typename result<
  122. function_eval(
  123. F &
  124. , A0 & , A1 & , A2 &
  125. , Context const &
  126. )
  127. >::type
  128. operator()(F & f, A0 & a0 , A1 & a1 , A2 & a2, Context const & ctx) const
  129. {
  130. return boost::phoenix::eval(f, ctx)(help_rvalue_deduction(boost::phoenix::eval(a0, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a1, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a2, ctx)));
  131. }
  132. template <
  133. typename This
  134. , typename F
  135. , typename A0 , typename A1 , typename A2 , typename A3
  136. , typename Context
  137. >
  138. struct result<This(F, A0 , A1 , A2 , A3, Context)>
  139. {
  140. typedef typename
  141. remove_reference<
  142. typename boost::result_of<evaluator(F, Context)>::type
  143. >::type
  144. fn;
  145. typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3;
  146. typedef typename
  147. boost::result_of<fn(a0 , a1 , a2 , a3)>::type
  148. type;
  149. };
  150. template <typename F, typename A0 , typename A1 , typename A2 , typename A3, typename Context>
  151. typename result<
  152. function_eval(
  153. F const &
  154. , A0 & , A1 & , A2 & , A3 &
  155. , Context const &
  156. )
  157. >::type
  158. operator()(F const & f, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3, Context const & ctx) const
  159. {
  160. return boost::phoenix::eval(f, ctx)(help_rvalue_deduction(boost::phoenix::eval(a0, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a1, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a2, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a3, ctx)));
  161. }
  162. template <typename F, typename A0 , typename A1 , typename A2 , typename A3, typename Context>
  163. typename result<
  164. function_eval(
  165. F &
  166. , A0 & , A1 & , A2 & , A3 &
  167. , Context const &
  168. )
  169. >::type
  170. operator()(F & f, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3, Context const & ctx) const
  171. {
  172. return boost::phoenix::eval(f, ctx)(help_rvalue_deduction(boost::phoenix::eval(a0, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a1, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a2, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a3, ctx)));
  173. }
  174. template <
  175. typename This
  176. , typename F
  177. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4
  178. , typename Context
  179. >
  180. struct result<This(F, A0 , A1 , A2 , A3 , A4, Context)>
  181. {
  182. typedef typename
  183. remove_reference<
  184. typename boost::result_of<evaluator(F, Context)>::type
  185. >::type
  186. fn;
  187. typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4;
  188. typedef typename
  189. boost::result_of<fn(a0 , a1 , a2 , a3 , a4)>::type
  190. type;
  191. };
  192. template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4, typename Context>
  193. typename result<
  194. function_eval(
  195. F const &
  196. , A0 & , A1 & , A2 & , A3 & , A4 &
  197. , Context const &
  198. )
  199. >::type
  200. operator()(F const & f, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4, Context const & ctx) const
  201. {
  202. return boost::phoenix::eval(f, ctx)(help_rvalue_deduction(boost::phoenix::eval(a0, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a1, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a2, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a3, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a4, ctx)));
  203. }
  204. template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4, typename Context>
  205. typename result<
  206. function_eval(
  207. F &
  208. , A0 & , A1 & , A2 & , A3 & , A4 &
  209. , Context const &
  210. )
  211. >::type
  212. operator()(F & f, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4, Context const & ctx) const
  213. {
  214. return boost::phoenix::eval(f, ctx)(help_rvalue_deduction(boost::phoenix::eval(a0, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a1, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a2, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a3, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a4, ctx)));
  215. }
  216. template <
  217. typename This
  218. , typename F
  219. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5
  220. , typename Context
  221. >
  222. struct result<This(F, A0 , A1 , A2 , A3 , A4 , A5, Context)>
  223. {
  224. typedef typename
  225. remove_reference<
  226. typename boost::result_of<evaluator(F, Context)>::type
  227. >::type
  228. fn;
  229. typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5;
  230. typedef typename
  231. boost::result_of<fn(a0 , a1 , a2 , a3 , a4 , a5)>::type
  232. type;
  233. };
  234. template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5, typename Context>
  235. typename result<
  236. function_eval(
  237. F const &
  238. , A0 & , A1 & , A2 & , A3 & , A4 & , A5 &
  239. , Context const &
  240. )
  241. >::type
  242. operator()(F const & f, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5, Context const & ctx) const
  243. {
  244. return boost::phoenix::eval(f, ctx)(help_rvalue_deduction(boost::phoenix::eval(a0, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a1, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a2, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a3, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a4, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a5, ctx)));
  245. }
  246. template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5, typename Context>
  247. typename result<
  248. function_eval(
  249. F &
  250. , A0 & , A1 & , A2 & , A3 & , A4 & , A5 &
  251. , Context const &
  252. )
  253. >::type
  254. operator()(F & f, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5, Context const & ctx) const
  255. {
  256. return boost::phoenix::eval(f, ctx)(help_rvalue_deduction(boost::phoenix::eval(a0, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a1, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a2, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a3, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a4, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a5, ctx)));
  257. }
  258. template <
  259. typename This
  260. , typename F
  261. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6
  262. , typename Context
  263. >
  264. struct result<This(F, A0 , A1 , A2 , A3 , A4 , A5 , A6, Context)>
  265. {
  266. typedef typename
  267. remove_reference<
  268. typename boost::result_of<evaluator(F, Context)>::type
  269. >::type
  270. fn;
  271. typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6;
  272. typedef typename
  273. boost::result_of<fn(a0 , a1 , a2 , a3 , a4 , a5 , a6)>::type
  274. type;
  275. };
  276. template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6, typename Context>
  277. typename result<
  278. function_eval(
  279. F const &
  280. , A0 & , A1 & , A2 & , A3 & , A4 & , A5 & , A6 &
  281. , Context const &
  282. )
  283. >::type
  284. operator()(F const & f, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6, Context const & ctx) const
  285. {
  286. return boost::phoenix::eval(f, ctx)(help_rvalue_deduction(boost::phoenix::eval(a0, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a1, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a2, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a3, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a4, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a5, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a6, ctx)));
  287. }
  288. template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6, typename Context>
  289. typename result<
  290. function_eval(
  291. F &
  292. , A0 & , A1 & , A2 & , A3 & , A4 & , A5 & , A6 &
  293. , Context const &
  294. )
  295. >::type
  296. operator()(F & f, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6, Context const & ctx) const
  297. {
  298. return boost::phoenix::eval(f, ctx)(help_rvalue_deduction(boost::phoenix::eval(a0, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a1, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a2, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a3, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a4, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a5, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a6, ctx)));
  299. }
  300. template <
  301. typename This
  302. , typename F
  303. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7
  304. , typename Context
  305. >
  306. struct result<This(F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7, Context)>
  307. {
  308. typedef typename
  309. remove_reference<
  310. typename boost::result_of<evaluator(F, Context)>::type
  311. >::type
  312. fn;
  313. typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7;
  314. typedef typename
  315. boost::result_of<fn(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7)>::type
  316. type;
  317. };
  318. template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7, typename Context>
  319. typename result<
  320. function_eval(
  321. F const &
  322. , A0 & , A1 & , A2 & , A3 & , A4 & , A5 & , A6 & , A7 &
  323. , Context const &
  324. )
  325. >::type
  326. operator()(F const & f, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7, Context const & ctx) const
  327. {
  328. return boost::phoenix::eval(f, ctx)(help_rvalue_deduction(boost::phoenix::eval(a0, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a1, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a2, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a3, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a4, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a5, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a6, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a7, ctx)));
  329. }
  330. template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7, typename Context>
  331. typename result<
  332. function_eval(
  333. F &
  334. , A0 & , A1 & , A2 & , A3 & , A4 & , A5 & , A6 & , A7 &
  335. , Context const &
  336. )
  337. >::type
  338. operator()(F & f, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7, Context const & ctx) const
  339. {
  340. return boost::phoenix::eval(f, ctx)(help_rvalue_deduction(boost::phoenix::eval(a0, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a1, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a2, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a3, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a4, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a5, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a6, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a7, ctx)));
  341. }
  342. template <
  343. typename This
  344. , typename F
  345. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8
  346. , typename Context
  347. >
  348. struct result<This(F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8, Context)>
  349. {
  350. typedef typename
  351. remove_reference<
  352. typename boost::result_of<evaluator(F, Context)>::type
  353. >::type
  354. fn;
  355. typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8;
  356. typedef typename
  357. boost::result_of<fn(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8)>::type
  358. type;
  359. };
  360. template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8, typename Context>
  361. typename result<
  362. function_eval(
  363. F const &
  364. , A0 & , A1 & , A2 & , A3 & , A4 & , A5 & , A6 & , A7 & , A8 &
  365. , Context const &
  366. )
  367. >::type
  368. operator()(F const & f, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8, Context const & ctx) const
  369. {
  370. return boost::phoenix::eval(f, ctx)(help_rvalue_deduction(boost::phoenix::eval(a0, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a1, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a2, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a3, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a4, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a5, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a6, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a7, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a8, ctx)));
  371. }
  372. template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8, typename Context>
  373. typename result<
  374. function_eval(
  375. F &
  376. , A0 & , A1 & , A2 & , A3 & , A4 & , A5 & , A6 & , A7 & , A8 &
  377. , Context const &
  378. )
  379. >::type
  380. operator()(F & f, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8, Context const & ctx) const
  381. {
  382. return boost::phoenix::eval(f, ctx)(help_rvalue_deduction(boost::phoenix::eval(a0, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a1, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a2, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a3, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a4, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a5, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a6, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a7, ctx)) , help_rvalue_deduction(boost::phoenix::eval(a8, ctx)));
  383. }