try_catch_eval_10.hpp 29 KB

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