casts.hpp 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470
  1. /*=============================================================================
  2. Phoenix V1.2.1
  3. Copyright (c) 2001-2003 Joel de Guzman
  4. Copyright (c) 2001-2003 Hartmut Kaiser
  5. Distributed under the Boost Software License, Version 1.0. (See accompanying
  6. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  7. ==============================================================================*/
  8. #ifndef PHOENIX_CASTS_HPP
  9. #define PHOENIX_CASTS_HPP
  10. ///////////////////////////////////////////////////////////////////////////////
  11. #include <boost/spirit/home/classic/phoenix/actor.hpp>
  12. #include <boost/spirit/home/classic/phoenix/composite.hpp>
  13. #include <boost/static_assert.hpp>
  14. ///////////////////////////////////////////////////////////////////////////////
  15. namespace phoenix {
  16. ///////////////////////////////////////////////////////////////////////////////
  17. //
  18. // Phoenix predefined maximum construct_ limit. This limit defines the maximum
  19. // number of parameters supported for calles to the set of construct_ template
  20. // functions (lazy object construction, see below). This number defaults to 3.
  21. // The actual maximum is rounded up in multiples of 3. Thus, if this value
  22. // is 4, the actual limit is 6. The ultimate maximum limit in this
  23. // implementation is 15.
  24. // PHOENIX_CONSTRUCT_LIMIT should NOT be greater than PHOENIX_LIMIT!
  25. #if !defined(PHOENIX_CONSTRUCT_LIMIT)
  26. #define PHOENIX_CONSTRUCT_LIMIT PHOENIX_LIMIT
  27. #endif
  28. // ensure PHOENIX_CONSTRUCT_LIMIT <= PHOENIX_LIMIT
  29. BOOST_STATIC_ASSERT(PHOENIX_CONSTRUCT_LIMIT <= PHOENIX_LIMIT);
  30. // ensure PHOENIX_CONSTRUCT_LIMIT <= 15
  31. BOOST_STATIC_ASSERT(PHOENIX_CONSTRUCT_LIMIT <= 15);
  32. ///////////////////////////////////////////////////////////////////////////////
  33. //
  34. // Lazy C++ casts
  35. //
  36. // The set of lazy C++ cast template classes and functions provide a way
  37. // of lazily casting certain type to another during parsing.
  38. // The lazy C++ templates are (syntactically) used very much like
  39. // the well known C++ casts:
  40. //
  41. // A *a = static_cast_<A *>(...actor returning a convertible type...);
  42. //
  43. // where the given parameter should be an actor, which eval() function
  44. // returns a convertible type.
  45. //
  46. ///////////////////////////////////////////////////////////////////////////////
  47. template <typename T, typename A>
  48. struct static_cast_l {
  49. template <typename TupleT>
  50. struct result { typedef T type; };
  51. static_cast_l(A const& a_)
  52. : a(a_) {}
  53. template <typename TupleT>
  54. T
  55. eval(TupleT const& args) const
  56. {
  57. return static_cast<T>(a.eval(args));
  58. }
  59. A a;
  60. };
  61. //////////////////////////////////
  62. template <typename T, typename BaseAT>
  63. inline actor<static_cast_l<T, BaseAT> >
  64. static_cast_(actor<BaseAT> const& a)
  65. {
  66. typedef static_cast_l<T, BaseAT> cast_t;
  67. return actor<cast_t>(cast_t(a));
  68. }
  69. //////////////////////////////////
  70. template <typename T, typename A>
  71. struct dynamic_cast_l {
  72. template <typename TupleT>
  73. struct result { typedef T type; };
  74. dynamic_cast_l(A const& a_)
  75. : a(a_) {}
  76. template <typename TupleT>
  77. T
  78. eval(TupleT const& args) const
  79. {
  80. return dynamic_cast<T>(a.eval(args));
  81. }
  82. A a;
  83. };
  84. //////////////////////////////////
  85. template <typename T, typename BaseAT>
  86. inline actor<dynamic_cast_l<T, BaseAT> >
  87. dynamic_cast_(actor<BaseAT> const& a)
  88. {
  89. typedef dynamic_cast_l<T, BaseAT> cast_t;
  90. return actor<cast_t>(cast_t(a));
  91. }
  92. //////////////////////////////////
  93. template <typename T, typename A>
  94. struct reinterpret_cast_l {
  95. template <typename TupleT>
  96. struct result { typedef T type; };
  97. reinterpret_cast_l(A const& a_)
  98. : a(a_) {}
  99. template <typename TupleT>
  100. T
  101. eval(TupleT const& args) const
  102. {
  103. return reinterpret_cast<T>(a.eval(args));
  104. }
  105. A a;
  106. };
  107. //////////////////////////////////
  108. template <typename T, typename BaseAT>
  109. inline actor<reinterpret_cast_l<T, BaseAT> >
  110. reinterpret_cast_(actor<BaseAT> const& a)
  111. {
  112. typedef reinterpret_cast_l<T, BaseAT> cast_t;
  113. return actor<cast_t>(cast_t(a));
  114. }
  115. //////////////////////////////////
  116. template <typename T, typename A>
  117. struct const_cast_l {
  118. template <typename TupleT>
  119. struct result { typedef T type; };
  120. const_cast_l(A const& a_)
  121. : a(a_) {}
  122. template <typename TupleT>
  123. T
  124. eval(TupleT const& args) const
  125. {
  126. return const_cast<T>(a.eval(args));
  127. }
  128. A a;
  129. };
  130. //////////////////////////////////
  131. template <typename T, typename BaseAT>
  132. inline actor<const_cast_l<T, BaseAT> >
  133. const_cast_(actor<BaseAT> const& a)
  134. {
  135. typedef const_cast_l<T, BaseAT> cast_t;
  136. return actor<cast_t>(cast_t(a));
  137. }
  138. ///////////////////////////////////////////////////////////////////////////////
  139. //
  140. // construct_
  141. //
  142. // Lazy object construction
  143. //
  144. // The set of construct_<> template classes and functions provide a way
  145. // of lazily constructing certain object from a arbitrary set of
  146. // actors during parsing.
  147. // The construct_ templates are (syntactically) used very much like
  148. // the well known C++ casts:
  149. //
  150. // A a = construct_<A>(...arbitrary list of actors...);
  151. //
  152. // where the given parameters are submitted as parameters to the
  153. // contructor of the object of type A. (This certainly implies, that
  154. // type A has a constructor with a fitting set of parameter types
  155. // defined.)
  156. //
  157. // The maximum number of needed parameters is controlled through the
  158. // preprocessor constant PHOENIX_CONSTRUCT_LIMIT. Note though, that this
  159. // limit should not be greater than PHOENIX_LIMIT.
  160. //
  161. ///////////////////////////////////////////////////////////////////////////////
  162. template <typename T>
  163. struct construct_l_0 {
  164. typedef T result_type;
  165. T operator()() const {
  166. return T();
  167. }
  168. };
  169. template <typename T>
  170. struct construct_l {
  171. template <
  172. typename A
  173. , typename B
  174. , typename C
  175. #if PHOENIX_CONSTRUCT_LIMIT > 3
  176. , typename D
  177. , typename E
  178. , typename F
  179. #if PHOENIX_CONSTRUCT_LIMIT > 6
  180. , typename G
  181. , typename H
  182. , typename I
  183. #if PHOENIX_CONSTRUCT_LIMIT > 9
  184. , typename J
  185. , typename K
  186. , typename L
  187. #if PHOENIX_CONSTRUCT_LIMIT > 12
  188. , typename M
  189. , typename N
  190. , typename O
  191. #endif
  192. #endif
  193. #endif
  194. #endif
  195. >
  196. struct result { typedef T type; };
  197. T operator()() const
  198. {
  199. return T();
  200. }
  201. template <typename A>
  202. T operator()(A const& a) const
  203. {
  204. T t(a);
  205. return t;
  206. }
  207. template <typename A, typename B>
  208. T operator()(A const& a, B const& b) const
  209. {
  210. T t(a, b);
  211. return t;
  212. }
  213. template <typename A, typename B, typename C>
  214. T operator()(A const& a, B const& b, C const& c) const
  215. {
  216. T t(a, b, c);
  217. return t;
  218. }
  219. #if PHOENIX_CONSTRUCT_LIMIT > 3
  220. template <
  221. typename A, typename B, typename C, typename D
  222. >
  223. T operator()(
  224. A const& a, B const& b, C const& c, D const& d) const
  225. {
  226. T t(a, b, c, d);
  227. return t;
  228. }
  229. template <
  230. typename A, typename B, typename C, typename D, typename E
  231. >
  232. T operator()(
  233. A const& a, B const& b, C const& c, D const& d, E const& e) const
  234. {
  235. T t(a, b, c, d, e);
  236. return t;
  237. }
  238. template <
  239. typename A, typename B, typename C, typename D, typename E,
  240. typename F
  241. >
  242. T operator()(
  243. A const& a, B const& b, C const& c, D const& d, E const& e,
  244. F const& f) const
  245. {
  246. T t(a, b, c, d, e, f);
  247. return t;
  248. }
  249. #if PHOENIX_CONSTRUCT_LIMIT > 6
  250. template <
  251. typename A, typename B, typename C, typename D, typename E,
  252. typename F, typename G
  253. >
  254. T operator()(
  255. A const& a, B const& b, C const& c, D const& d, E const& e,
  256. F const& f, G const& g) const
  257. {
  258. T t(a, b, c, d, e, f, g);
  259. return t;
  260. }
  261. template <
  262. typename A, typename B, typename C, typename D, typename E,
  263. typename F, typename G, typename H
  264. >
  265. T operator()(
  266. A const& a, B const& b, C const& c, D const& d, E const& e,
  267. F const& f, G const& g, H const& h) const
  268. {
  269. T t(a, b, c, d, e, f, g, h);
  270. return t;
  271. }
  272. template <
  273. typename A, typename B, typename C, typename D, typename E,
  274. typename F, typename G, typename H, typename I
  275. >
  276. T operator()(
  277. A const& a, B const& b, C const& c, D const& d, E const& e,
  278. F const& f, G const& g, H const& h, I const& i) const
  279. {
  280. T t(a, b, c, d, e, f, g, h, i);
  281. return t;
  282. }
  283. #if PHOENIX_CONSTRUCT_LIMIT > 9
  284. template <
  285. typename A, typename B, typename C, typename D, typename E,
  286. typename F, typename G, typename H, typename I, typename J
  287. >
  288. T operator()(
  289. A const& a, B const& b, C const& c, D const& d, E const& e,
  290. F const& f, G const& g, H const& h, I const& i, J const& j) const
  291. {
  292. T t(a, b, c, d, e, f, g, h, i, j);
  293. return t;
  294. }
  295. template <
  296. typename A, typename B, typename C, typename D, typename E,
  297. typename F, typename G, typename H, typename I, typename J,
  298. typename K
  299. >
  300. T operator()(
  301. A const& a, B const& b, C const& c, D const& d, E const& e,
  302. F const& f, G const& g, H const& h, I const& i, J const& j,
  303. K const& k) const
  304. {
  305. T t(a, b, c, d, e, f, g, h, i, j, k);
  306. return t;
  307. }
  308. template <
  309. typename A, typename B, typename C, typename D, typename E,
  310. typename F, typename G, typename H, typename I, typename J,
  311. typename K, typename L
  312. >
  313. T operator()(
  314. A const& a, B const& b, C const& c, D const& d, E const& e,
  315. F const& f, G const& g, H const& h, I const& i, J const& j,
  316. K const& k, L const& l) const
  317. {
  318. T t(a, b, c, d, e, f, g, h, i, j, k, l);
  319. return t;
  320. }
  321. #if PHOENIX_CONSTRUCT_LIMIT > 12
  322. template <
  323. typename A, typename B, typename C, typename D, typename E,
  324. typename F, typename G, typename H, typename I, typename J,
  325. typename K, typename L, typename M
  326. >
  327. T operator()(
  328. A const& a, B const& b, C const& c, D const& d, E const& e,
  329. F const& f, G const& g, H const& h, I const& i, J const& j,
  330. K const& k, L const& l, M const& m) const
  331. {
  332. T t(a, b, c, d, e, f, g, h, i, j, k, l, m);
  333. return t;
  334. }
  335. template <
  336. typename A, typename B, typename C, typename D, typename E,
  337. typename F, typename G, typename H, typename I, typename J,
  338. typename K, typename L, typename M, typename N
  339. >
  340. T operator()(
  341. A const& a, B const& b, C const& c, D const& d, E const& e,
  342. F const& f, G const& g, H const& h, I const& i, J const& j,
  343. K const& k, L const& l, M const& m, N const& n) const
  344. {
  345. T t(a, b, c, d, e, f, g, h, i, j, k, l, m, n);
  346. return t;
  347. }
  348. template <
  349. typename A, typename B, typename C, typename D, typename E,
  350. typename F, typename G, typename H, typename I, typename J,
  351. typename K, typename L, typename M, typename N, typename O
  352. >
  353. T operator()(
  354. A const& a, B const& b, C const& c, D const& d, E const& e,
  355. F const& f, G const& g, H const& h, I const& i, J const& j,
  356. K const& k, L const& l, M const& m, N const& n, O const& o) const
  357. {
  358. T t(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o);
  359. return t;
  360. }
  361. #endif
  362. #endif
  363. #endif
  364. #endif
  365. };
  366. template <typename T>
  367. struct construct_1 {
  368. template <
  369. typename A
  370. >
  371. struct result { typedef T type; };
  372. template <typename A>
  373. T operator()(A const& a) const
  374. {
  375. T t(a);
  376. return t;
  377. }
  378. };
  379. template <typename T>
  380. struct construct_2 {
  381. template <
  382. typename A
  383. , typename B
  384. >
  385. struct result { typedef T type; };
  386. template <typename A, typename B>
  387. T operator()(A const& a, B const& b) const
  388. {
  389. T t(a, b);
  390. return t;
  391. }
  392. };
  393. template <typename T>
  394. struct construct_3 {
  395. template <
  396. typename A
  397. , typename B
  398. , typename C
  399. >
  400. struct result { typedef T type; };
  401. template <typename A, typename B, typename C>
  402. T operator()(A const& a, B const& b, C const& c) const
  403. {
  404. T t(a, b, c);
  405. return t;
  406. }
  407. };
  408. #if PHOENIX_CONSTRUCT_LIMIT > 3
  409. template <typename T>
  410. struct construct_4 {
  411. template <
  412. typename A
  413. , typename B
  414. , typename C
  415. , typename D
  416. >
  417. struct result { typedef T type; };
  418. template <
  419. typename A, typename B, typename C, typename D
  420. >
  421. T operator()(
  422. A const& a, B const& b, C const& c, D const& d) const
  423. {
  424. T t(a, b, c, d);
  425. return t;
  426. }
  427. };
  428. template <typename T>
  429. struct construct_5 {
  430. template <
  431. typename A
  432. , typename B
  433. , typename C
  434. , typename D
  435. , typename E
  436. >
  437. struct result { typedef T type; };
  438. template <
  439. typename A, typename B, typename C, typename D, typename E
  440. >
  441. T operator()(
  442. A const& a, B const& b, C const& c, D const& d, E const& e) const
  443. {
  444. T t(a, b, c, d, e);
  445. return t;
  446. }
  447. };
  448. template <typename T>
  449. struct construct_6 {
  450. template <
  451. typename A
  452. , typename B
  453. , typename C
  454. , typename D
  455. , typename E
  456. , typename F
  457. >
  458. struct result { typedef T type; };
  459. template <
  460. typename A, typename B, typename C, typename D, typename E,
  461. typename F
  462. >
  463. T operator()(
  464. A const& a, B const& b, C const& c, D const& d, E const& e,
  465. F const& f) const
  466. {
  467. T t(a, b, c, d, e, f);
  468. return t;
  469. }
  470. };
  471. #endif
  472. #if PHOENIX_CONSTRUCT_LIMIT > 6
  473. template <typename T>
  474. struct construct_7 {
  475. template <
  476. typename A
  477. , typename B
  478. , typename C
  479. , typename D
  480. , typename E
  481. , typename F
  482. , typename G
  483. >
  484. struct result { typedef T type; };
  485. template <
  486. typename A, typename B, typename C, typename D, typename E,
  487. typename F, typename G
  488. >
  489. T operator()(
  490. A const& a, B const& b, C const& c, D const& d, E const& e,
  491. F const& f, G const& g) const
  492. {
  493. T t(a, b, c, d, e, f, g);
  494. return t;
  495. }
  496. };
  497. template <typename T>
  498. struct construct_8 {
  499. template <
  500. typename A
  501. , typename B
  502. , typename C
  503. , typename D
  504. , typename E
  505. , typename F
  506. , typename G
  507. , typename H
  508. >
  509. struct result { typedef T type; };
  510. template <
  511. typename A, typename B, typename C, typename D, typename E,
  512. typename F, typename G, typename H
  513. >
  514. T operator()(
  515. A const& a, B const& b, C const& c, D const& d, E const& e,
  516. F const& f, G const& g, H const& h) const
  517. {
  518. T t(a, b, c, d, e, f, g, h);
  519. return t;
  520. }
  521. };
  522. template <typename T>
  523. struct construct_9 {
  524. template <
  525. typename A
  526. , typename B
  527. , typename C
  528. , typename D
  529. , typename E
  530. , typename F
  531. , typename G
  532. , typename H
  533. , typename I
  534. >
  535. struct result { typedef T type; };
  536. template <
  537. typename A, typename B, typename C, typename D, typename E,
  538. typename F, typename G, typename H, typename I
  539. >
  540. T operator()(
  541. A const& a, B const& b, C const& c, D const& d, E const& e,
  542. F const& f, G const& g, H const& h, I const& i) const
  543. {
  544. T t(a, b, c, d, e, f, g, h, i);
  545. return t;
  546. }
  547. };
  548. #endif
  549. #if PHOENIX_CONSTRUCT_LIMIT > 9
  550. template <typename T>
  551. struct construct_10 {
  552. template <
  553. typename A
  554. , typename B
  555. , typename C
  556. , typename D
  557. , typename E
  558. , typename F
  559. , typename G
  560. , typename H
  561. , typename I
  562. , typename J
  563. >
  564. struct result { typedef T type; };
  565. template <
  566. typename A, typename B, typename C, typename D, typename E,
  567. typename F, typename G, typename H, typename I, typename J
  568. >
  569. T operator()(
  570. A const& a, B const& b, C const& c, D const& d, E const& e,
  571. F const& f, G const& g, H const& h, I const& i, J const& j) const
  572. {
  573. T t(a, b, c, d, e, f, g, h, i, j);
  574. return t;
  575. }
  576. };
  577. template <typename T>
  578. struct construct_11 {
  579. template <
  580. typename A
  581. , typename B
  582. , typename C
  583. , typename D
  584. , typename E
  585. , typename F
  586. , typename G
  587. , typename H
  588. , typename I
  589. , typename J
  590. , typename K
  591. >
  592. struct result { typedef T type; };
  593. template <
  594. typename A, typename B, typename C, typename D, typename E,
  595. typename F, typename G, typename H, typename I, typename J,
  596. typename K
  597. >
  598. T operator()(
  599. A const& a, B const& b, C const& c, D const& d, E const& e,
  600. F const& f, G const& g, H const& h, I const& i, J const& j,
  601. K const& k) const
  602. {
  603. T t(a, b, c, d, e, f, g, h, i, j, k);
  604. return t;
  605. }
  606. };
  607. template <typename T>
  608. struct construct_12 {
  609. template <
  610. typename A
  611. , typename B
  612. , typename C
  613. , typename D
  614. , typename E
  615. , typename F
  616. , typename G
  617. , typename H
  618. , typename I
  619. , typename J
  620. , typename K
  621. , typename L
  622. >
  623. struct result { typedef T type; };
  624. template <
  625. typename A, typename B, typename C, typename D, typename E,
  626. typename F, typename G, typename H, typename I, typename J,
  627. typename K, typename L
  628. >
  629. T operator()(
  630. A const& a, B const& b, C const& c, D const& d, E const& e,
  631. F const& f, G const& g, H const& h, I const& i, J const& j,
  632. K const& k, L const& l) const
  633. {
  634. T t(a, b, c, d, f, e, g, h, i, j, k, l);
  635. return t;
  636. }
  637. };
  638. #endif
  639. #if PHOENIX_CONSTRUCT_LIMIT > 12
  640. template <typename T>
  641. struct construct_13 {
  642. template <
  643. typename A
  644. , typename B
  645. , typename C
  646. , typename D
  647. , typename E
  648. , typename F
  649. , typename G
  650. , typename H
  651. , typename I
  652. , typename J
  653. , typename K
  654. , typename L
  655. , typename M
  656. >
  657. struct result { typedef T type; };
  658. template <
  659. typename A, typename B, typename C, typename D, typename E,
  660. typename F, typename G, typename H, typename I, typename J,
  661. typename K, typename L, typename M
  662. >
  663. T operator()(
  664. A const& a, B const& b, C const& c, D const& d, E const& e,
  665. F const& f, G const& g, H const& h, I const& i, J const& j,
  666. K const& k, L const& l, M const& m) const
  667. {
  668. T t(a, b, c, d, e, f, g, h, i, j, k, l, m);
  669. return t;
  670. }
  671. };
  672. template <typename T>
  673. struct construct_14 {
  674. template <
  675. typename A
  676. , typename B
  677. , typename C
  678. , typename D
  679. , typename E
  680. , typename F
  681. , typename G
  682. , typename H
  683. , typename I
  684. , typename J
  685. , typename K
  686. , typename L
  687. , typename M
  688. , typename N
  689. >
  690. struct result { typedef T type; };
  691. template <
  692. typename A, typename B, typename C, typename D, typename E,
  693. typename F, typename G, typename H, typename I, typename J,
  694. typename K, typename L, typename M, typename N
  695. >
  696. T operator()(
  697. A const& a, B const& b, C const& c, D const& d, E const& e,
  698. F const& f, G const& g, H const& h, I const& i, J const& j,
  699. K const& k, L const& l, M const& m, N const& n) const
  700. {
  701. T t(a, b, c, d, e, f, g, h, i, j, k, l, m, n);
  702. return t;
  703. }
  704. };
  705. template <typename T>
  706. struct construct_15 {
  707. template <
  708. typename A
  709. , typename B
  710. , typename C
  711. , typename D
  712. , typename E
  713. , typename F
  714. , typename G
  715. , typename H
  716. , typename I
  717. , typename J
  718. , typename K
  719. , typename L
  720. , typename M
  721. , typename N
  722. , typename O
  723. >
  724. struct result { typedef T type; };
  725. template <
  726. typename A, typename B, typename C, typename D, typename E,
  727. typename F, typename G, typename H, typename I, typename J,
  728. typename K, typename L, typename M, typename N, typename O
  729. >
  730. T operator()(
  731. A const& a, B const& b, C const& c, D const& d, E const& e,
  732. F const& f, G const& g, H const& h, I const& i, J const& j,
  733. K const& k, L const& l, M const& m, N const& n, O const& o) const
  734. {
  735. T t(a, b, c, d, f, e, g, h, i, j, k, l, m, n, o);
  736. return t;
  737. }
  738. };
  739. #endif
  740. #if defined(__BORLANDC__) || (defined(__MWERKS__) && (__MWERKS__ <= 0x3002))
  741. ///////////////////////////////////////////////////////////////////////////////
  742. //
  743. // The following specializations are needed because Borland and CodeWarrior
  744. // does not accept default template arguments in nested template classes in
  745. // classes (i.e construct_l::result)
  746. //
  747. ///////////////////////////////////////////////////////////////////////////////
  748. template <typename T, typename TupleT>
  749. struct composite0_result<construct_l_0<T>, TupleT> {
  750. typedef T type;
  751. };
  752. //////////////////////////////////
  753. template <typename T, typename TupleT,
  754. typename A>
  755. struct composite1_result<construct_l<T>, TupleT, A> {
  756. typedef T type;
  757. };
  758. //////////////////////////////////
  759. template <typename T, typename TupleT,
  760. typename A, typename B>
  761. struct composite2_result<construct_l<T>, TupleT, A, B> {
  762. typedef T type;
  763. };
  764. //////////////////////////////////
  765. template <typename T, typename TupleT,
  766. typename A, typename B, typename C>
  767. struct composite3_result<construct_l<T>, TupleT, A, B, C> {
  768. typedef T type;
  769. };
  770. #if PHOENIX_LIMIT > 3
  771. //////////////////////////////////
  772. template <typename T, typename TupleT,
  773. typename A, typename B, typename C, typename D>
  774. struct composite4_result<construct_l<T>, TupleT,
  775. A, B, C, D> {
  776. typedef T type;
  777. };
  778. //////////////////////////////////
  779. template <typename T, typename TupleT,
  780. typename A, typename B, typename C, typename D, typename E>
  781. struct composite5_result<construct_l<T>, TupleT,
  782. A, B, C, D, E> {
  783. typedef T type;
  784. };
  785. //////////////////////////////////
  786. template <typename T, typename TupleT,
  787. typename A, typename B, typename C, typename D, typename E,
  788. typename F>
  789. struct composite6_result<construct_l<T>, TupleT,
  790. A, B, C, D, E, F> {
  791. typedef T type;
  792. };
  793. #if PHOENIX_LIMIT > 6
  794. //////////////////////////////////
  795. template <typename T, typename TupleT,
  796. typename A, typename B, typename C, typename D, typename E,
  797. typename F, typename G>
  798. struct composite7_result<construct_l<T>, TupleT,
  799. A, B, C, D, E, F, G> {
  800. typedef T type;
  801. };
  802. //////////////////////////////////
  803. template <typename T, typename TupleT,
  804. typename A, typename B, typename C, typename D, typename E,
  805. typename F, typename G, typename H>
  806. struct composite8_result<construct_l<T>, TupleT,
  807. A, B, C, D, E, F, G, H> {
  808. typedef T type;
  809. };
  810. //////////////////////////////////
  811. template <typename T, typename TupleT,
  812. typename A, typename B, typename C, typename D, typename E,
  813. typename F, typename G, typename H, typename I>
  814. struct composite9_result<construct_l<T>, TupleT,
  815. A, B, C, D, E, F, G, H, I> {
  816. typedef T type;
  817. };
  818. #if PHOENIX_LIMIT > 9
  819. //////////////////////////////////
  820. template <typename T, typename TupleT,
  821. typename A, typename B, typename C, typename D, typename E,
  822. typename F, typename G, typename H, typename I, typename J>
  823. struct composite10_result<construct_l<T>, TupleT,
  824. A, B, C, D, E, F, G, H, I, J> {
  825. typedef T type;
  826. };
  827. //////////////////////////////////
  828. template <typename T, typename TupleT,
  829. typename A, typename B, typename C, typename D, typename E,
  830. typename F, typename G, typename H, typename I, typename J,
  831. typename K>
  832. struct composite11_result<construct_l<T>, TupleT,
  833. A, B, C, D, E, F, G, H, I, J, K> {
  834. typedef T type;
  835. };
  836. //////////////////////////////////
  837. template <typename T, typename TupleT,
  838. typename A, typename B, typename C, typename D, typename E,
  839. typename F, typename G, typename H, typename I, typename J,
  840. typename K, typename L>
  841. struct composite12_result<construct_l<T>, TupleT,
  842. A, B, C, D, E, F, G, H, I, J, K, L> {
  843. typedef T type;
  844. };
  845. #if PHOENIX_LIMIT > 12
  846. //////////////////////////////////
  847. template <typename T, typename TupleT,
  848. typename A, typename B, typename C, typename D, typename E,
  849. typename F, typename G, typename H, typename I, typename J,
  850. typename K, typename L, typename M>
  851. struct composite13_result<construct_l<T>, TupleT,
  852. A, B, C, D, E, F, G, H, I, J, K, L, M> {
  853. typedef T type;
  854. };
  855. //////////////////////////////////
  856. template <typename T, typename TupleT,
  857. typename A, typename B, typename C, typename D, typename E,
  858. typename F, typename G, typename H, typename I, typename J,
  859. typename K, typename L, typename M, typename N>
  860. struct composite14_result<construct_l<T>, TupleT,
  861. A, B, C, D, E, F, G, H, I, J, K, L, M, N> {
  862. typedef T type;
  863. };
  864. //////////////////////////////////
  865. template <typename T, typename TupleT,
  866. typename A, typename B, typename C, typename D, typename E,
  867. typename F, typename G, typename H, typename I, typename J,
  868. typename K, typename L, typename M, typename N, typename O>
  869. struct composite15_result<construct_l<T>, TupleT,
  870. A, B, C, D, E, F, G, H, I, J, K, L, M, N, O> {
  871. typedef T type;
  872. };
  873. #endif
  874. #endif
  875. #endif
  876. #endif
  877. #endif
  878. //////////////////////////////////
  879. template <typename T>
  880. inline typename impl::make_composite<construct_l_0<T> >::type
  881. construct_()
  882. {
  883. typedef impl::make_composite<construct_l_0<T> > make_composite_t;
  884. typedef typename make_composite_t::type type_t;
  885. typedef typename make_composite_t::composite_type composite_type_t;
  886. return type_t(composite_type_t(construct_l_0<T>()));
  887. }
  888. //////////////////////////////////
  889. template <typename T, typename A>
  890. inline typename impl::make_composite<construct_1<T>, A>::type
  891. construct_(A const& a)
  892. {
  893. typedef impl::make_composite<construct_1<T>, A> make_composite_t;
  894. typedef typename make_composite_t::type type_t;
  895. typedef typename make_composite_t::composite_type composite_type_t;
  896. return type_t(composite_type_t(construct_1<T>(),
  897. as_actor<A>::convert(a)
  898. ));
  899. }
  900. //////////////////////////////////
  901. template <typename T, typename A, typename B>
  902. inline typename impl::make_composite<construct_2<T>, A, B>::type
  903. construct_(A const& a, B const& b)
  904. {
  905. typedef impl::make_composite<construct_2<T>, A, B> make_composite_t;
  906. typedef typename make_composite_t::type type_t;
  907. typedef typename make_composite_t::composite_type composite_type_t;
  908. return type_t(composite_type_t(construct_2<T>(),
  909. as_actor<A>::convert(a),
  910. as_actor<B>::convert(b)
  911. ));
  912. }
  913. //////////////////////////////////
  914. template <typename T, typename A, typename B, typename C>
  915. inline typename impl::make_composite<construct_3<T>, A, B, C>::type
  916. construct_(A const& a, B const& b, C const& c)
  917. {
  918. typedef impl::make_composite<construct_3<T>, A, B, C> make_composite_t;
  919. typedef typename make_composite_t::type type_t;
  920. typedef typename make_composite_t::composite_type composite_type_t;
  921. return type_t(composite_type_t(construct_3<T>(),
  922. as_actor<A>::convert(a),
  923. as_actor<B>::convert(b),
  924. as_actor<C>::convert(c)
  925. ));
  926. }
  927. #if PHOENIX_CONSTRUCT_LIMIT > 3
  928. //////////////////////////////////
  929. template <
  930. typename T, typename A, typename B, typename C, typename D
  931. >
  932. inline typename impl::make_composite<construct_4<T>, A, B, C, D>::type
  933. construct_(
  934. A const& a, B const& b, C const& c, D const& d)
  935. {
  936. typedef
  937. impl::make_composite<construct_4<T>, A, B, C, D>
  938. make_composite_t;
  939. typedef typename make_composite_t::type type_t;
  940. typedef typename make_composite_t::composite_type composite_type_t;
  941. return type_t(composite_type_t(construct_4<T>(),
  942. as_actor<A>::convert(a),
  943. as_actor<B>::convert(b),
  944. as_actor<C>::convert(c),
  945. as_actor<D>::convert(d)
  946. ));
  947. }
  948. //////////////////////////////////
  949. template <
  950. typename T, typename A, typename B, typename C, typename D, typename E
  951. >
  952. inline typename impl::make_composite<construct_5<T>, A, B, C, D, E>::type
  953. construct_(
  954. A const& a, B const& b, C const& c, D const& d, E const& e)
  955. {
  956. typedef
  957. impl::make_composite<construct_5<T>, A, B, C, D, E>
  958. make_composite_t;
  959. typedef typename make_composite_t::type type_t;
  960. typedef typename make_composite_t::composite_type composite_type_t;
  961. return type_t(composite_type_t(construct_5<T>(),
  962. as_actor<A>::convert(a),
  963. as_actor<B>::convert(b),
  964. as_actor<C>::convert(c),
  965. as_actor<D>::convert(d),
  966. as_actor<E>::convert(e)
  967. ));
  968. }
  969. //////////////////////////////////
  970. template <
  971. typename T, typename A, typename B, typename C, typename D, typename E,
  972. typename F
  973. >
  974. inline typename impl::make_composite<construct_6<T>, A, B, C, D, E, F>::type
  975. construct_(
  976. A const& a, B const& b, C const& c, D const& d, E const& e,
  977. F const& f)
  978. {
  979. typedef
  980. impl::make_composite<construct_6<T>, A, B, C, D, E, F>
  981. make_composite_t;
  982. typedef typename make_composite_t::type type_t;
  983. typedef typename make_composite_t::composite_type composite_type_t;
  984. return type_t(composite_type_t(construct_6<T>(),
  985. as_actor<A>::convert(a),
  986. as_actor<B>::convert(b),
  987. as_actor<C>::convert(c),
  988. as_actor<D>::convert(d),
  989. as_actor<E>::convert(e),
  990. as_actor<F>::convert(f)
  991. ));
  992. }
  993. #if PHOENIX_CONSTRUCT_LIMIT > 6
  994. //////////////////////////////////
  995. template <
  996. typename T, typename A, typename B, typename C, typename D, typename E,
  997. typename F, typename G
  998. >
  999. inline typename impl::make_composite<construct_7<T>, A, B, C, D, E, F, G>::type
  1000. construct_(
  1001. A const& a, B const& b, C const& c, D const& d, E const& e,
  1002. F const& f, G const& g)
  1003. {
  1004. typedef
  1005. impl::make_composite<construct_7<T>, A, B, C, D, E, F, G>
  1006. make_composite_t;
  1007. typedef typename make_composite_t::type type_t;
  1008. typedef typename make_composite_t::composite_type composite_type_t;
  1009. return type_t(composite_type_t(construct_7<T>(),
  1010. as_actor<A>::convert(a),
  1011. as_actor<B>::convert(b),
  1012. as_actor<C>::convert(c),
  1013. as_actor<D>::convert(d),
  1014. as_actor<E>::convert(e),
  1015. as_actor<F>::convert(f),
  1016. as_actor<G>::convert(g)
  1017. ));
  1018. }
  1019. //////////////////////////////////
  1020. template <
  1021. typename T, typename A, typename B, typename C, typename D, typename E,
  1022. typename F, typename G, typename H
  1023. >
  1024. inline typename impl::make_composite<construct_8<T>, A, B, C, D, E, F, G, H>::type
  1025. construct_(
  1026. A const& a, B const& b, C const& c, D const& d, E const& e,
  1027. F const& f, G const& g, H const& h)
  1028. {
  1029. typedef
  1030. impl::make_composite<construct_8<T>, A, B, C, D, E, F, G, H>
  1031. make_composite_t;
  1032. typedef typename make_composite_t::type type_t;
  1033. typedef typename make_composite_t::composite_type composite_type_t;
  1034. return type_t(composite_type_t(construct_8<T>(),
  1035. as_actor<A>::convert(a),
  1036. as_actor<B>::convert(b),
  1037. as_actor<C>::convert(c),
  1038. as_actor<D>::convert(d),
  1039. as_actor<E>::convert(e),
  1040. as_actor<F>::convert(f),
  1041. as_actor<G>::convert(g),
  1042. as_actor<H>::convert(h)
  1043. ));
  1044. }
  1045. //////////////////////////////////
  1046. template <
  1047. typename T, typename A, typename B, typename C, typename D, typename E,
  1048. typename F, typename G, typename H, typename I
  1049. >
  1050. inline typename impl::make_composite<construct_9<T>, A, B, C, D, E, F, G, H, I>::type
  1051. construct_(
  1052. A const& a, B const& b, C const& c, D const& d, E const& e,
  1053. F const& f, G const& g, H const& h, I const& i)
  1054. {
  1055. typedef
  1056. impl::make_composite<construct_9<T>, A, B, C, D, E, F, G, H, I>
  1057. make_composite_t;
  1058. typedef typename make_composite_t::type type_t;
  1059. typedef typename make_composite_t::composite_type composite_type_t;
  1060. return type_t(composite_type_t(construct_9<T>(),
  1061. as_actor<A>::convert(a),
  1062. as_actor<B>::convert(b),
  1063. as_actor<C>::convert(c),
  1064. as_actor<D>::convert(d),
  1065. as_actor<E>::convert(e),
  1066. as_actor<F>::convert(f),
  1067. as_actor<G>::convert(g),
  1068. as_actor<H>::convert(h),
  1069. as_actor<I>::convert(i)
  1070. ));
  1071. }
  1072. #if PHOENIX_CONSTRUCT_LIMIT > 9
  1073. //////////////////////////////////
  1074. template <
  1075. typename T, typename A, typename B, typename C, typename D, typename E,
  1076. typename F, typename G, typename H, typename I, typename J
  1077. >
  1078. inline typename impl::make_composite<
  1079. construct_10<T>, A, B, C, D, E, F, G, H, I, J>::type
  1080. construct_(
  1081. A const& a, B const& b, C const& c, D const& d, E const& e,
  1082. F const& f, G const& g, H const& h, I const& i, J const& j)
  1083. {
  1084. typedef
  1085. impl::make_composite<
  1086. construct_10<T>, A, B, C, D, E, F, G, H, I, J
  1087. >
  1088. make_composite_t;
  1089. typedef typename make_composite_t::type type_t;
  1090. typedef typename make_composite_t::composite_type composite_type_t;
  1091. return type_t(composite_type_t(construct_10<T>(),
  1092. as_actor<A>::convert(a),
  1093. as_actor<B>::convert(b),
  1094. as_actor<C>::convert(c),
  1095. as_actor<D>::convert(d),
  1096. as_actor<E>::convert(e),
  1097. as_actor<F>::convert(f),
  1098. as_actor<G>::convert(g),
  1099. as_actor<H>::convert(h),
  1100. as_actor<I>::convert(i),
  1101. as_actor<J>::convert(j)
  1102. ));
  1103. }
  1104. //////////////////////////////////
  1105. template <
  1106. typename T, typename A, typename B, typename C, typename D, typename E,
  1107. typename F, typename G, typename H, typename I, typename J, typename K
  1108. >
  1109. inline typename impl::make_composite<
  1110. construct_11<T>, A, B, C, D, E, F, G, H, I, J, K>::type
  1111. construct_(
  1112. A const& a, B const& b, C const& c, D const& d, E const& e,
  1113. F const& f, G const& g, H const& h, I const& i, J const& j,
  1114. K const& k)
  1115. {
  1116. typedef
  1117. impl::make_composite<
  1118. construct_11<T>, A, B, C, D, E, F, G, H, I, J, K
  1119. >
  1120. make_composite_t;
  1121. typedef typename make_composite_t::type type_t;
  1122. typedef typename make_composite_t::composite_type composite_type_t;
  1123. return type_t(composite_type_t(construct_11<T>(),
  1124. as_actor<A>::convert(a),
  1125. as_actor<B>::convert(b),
  1126. as_actor<C>::convert(c),
  1127. as_actor<D>::convert(d),
  1128. as_actor<E>::convert(e),
  1129. as_actor<F>::convert(f),
  1130. as_actor<G>::convert(g),
  1131. as_actor<H>::convert(h),
  1132. as_actor<I>::convert(i),
  1133. as_actor<J>::convert(j),
  1134. as_actor<K>::convert(k)
  1135. ));
  1136. }
  1137. //////////////////////////////////
  1138. template <
  1139. typename T, typename A, typename B, typename C, typename D, typename E,
  1140. typename F, typename G, typename H, typename I, typename J, typename K,
  1141. typename L
  1142. >
  1143. inline typename impl::make_composite<
  1144. construct_12<T>, A, B, C, D, E, F, G, H, I, J, K, L>::type
  1145. construct_(
  1146. A const& a, B const& b, C const& c, D const& d, E const& e,
  1147. F const& f, G const& g, H const& h, I const& i, J const& j,
  1148. K const& k, L const& l)
  1149. {
  1150. typedef
  1151. impl::make_composite<
  1152. construct_12<T>, A, B, C, D, E, F, G, H, I, J, K, L
  1153. >
  1154. make_composite_t;
  1155. typedef typename make_composite_t::type type_t;
  1156. typedef typename make_composite_t::composite_type composite_type_t;
  1157. return type_t(composite_type_t(construct_12<T>(),
  1158. as_actor<A>::convert(a),
  1159. as_actor<B>::convert(b),
  1160. as_actor<C>::convert(c),
  1161. as_actor<D>::convert(d),
  1162. as_actor<E>::convert(e),
  1163. as_actor<F>::convert(f),
  1164. as_actor<G>::convert(g),
  1165. as_actor<H>::convert(h),
  1166. as_actor<I>::convert(i),
  1167. as_actor<J>::convert(j),
  1168. as_actor<K>::convert(k),
  1169. as_actor<L>::convert(l)
  1170. ));
  1171. }
  1172. #if PHOENIX_CONSTRUCT_LIMIT > 12
  1173. //////////////////////////////////
  1174. template <
  1175. typename T, typename A, typename B, typename C, typename D, typename E,
  1176. typename F, typename G, typename H, typename I, typename J, typename K,
  1177. typename L, typename M
  1178. >
  1179. inline typename impl::make_composite<
  1180. construct_13<T>, A, B, C, D, E, F, G, H, I, J, K, L, M>::type
  1181. construct_(
  1182. A const& a, B const& b, C const& c, D const& d, E const& e,
  1183. F const& f, G const& g, H const& h, I const& i, J const& j,
  1184. K const& k, L const& l, M const& m)
  1185. {
  1186. typedef
  1187. impl::make_composite<
  1188. construct_13<T>, A, B, C, D, E, F, G, H, I, J, K, L, M
  1189. >
  1190. make_composite_t;
  1191. typedef typename make_composite_t::type type_t;
  1192. typedef typename make_composite_t::composite_type composite_type_t;
  1193. return type_t(composite_type_t(construct_13<T>(),
  1194. as_actor<A>::convert(a),
  1195. as_actor<B>::convert(b),
  1196. as_actor<C>::convert(c),
  1197. as_actor<D>::convert(d),
  1198. as_actor<E>::convert(e),
  1199. as_actor<F>::convert(f),
  1200. as_actor<G>::convert(g),
  1201. as_actor<H>::convert(h),
  1202. as_actor<I>::convert(i),
  1203. as_actor<J>::convert(j),
  1204. as_actor<K>::convert(k),
  1205. as_actor<L>::convert(l),
  1206. as_actor<M>::convert(m)
  1207. ));
  1208. }
  1209. //////////////////////////////////
  1210. template <
  1211. typename T, typename A, typename B, typename C, typename D, typename E,
  1212. typename F, typename G, typename H, typename I, typename J, typename K,
  1213. typename L, typename M, typename N
  1214. >
  1215. inline typename impl::make_composite<
  1216. construct_14<T>, A, B, C, D, E, F, G, H, I, J, K, L, M>::type
  1217. construct_(
  1218. A const& a, B const& b, C const& c, D const& d, E const& e,
  1219. F const& f, G const& g, H const& h, I const& i, J const& j,
  1220. K const& k, L const& l, M const& m, N const& n)
  1221. {
  1222. typedef
  1223. impl::make_composite<
  1224. construct_14<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, N
  1225. >
  1226. make_composite_t;
  1227. typedef typename make_composite_t::type type_t;
  1228. typedef typename make_composite_t::composite_type composite_type_t;
  1229. return type_t(composite_type_t(construct_14<T>(),
  1230. as_actor<A>::convert(a),
  1231. as_actor<B>::convert(b),
  1232. as_actor<C>::convert(c),
  1233. as_actor<D>::convert(d),
  1234. as_actor<E>::convert(e),
  1235. as_actor<F>::convert(f),
  1236. as_actor<G>::convert(g),
  1237. as_actor<H>::convert(h),
  1238. as_actor<I>::convert(i),
  1239. as_actor<J>::convert(j),
  1240. as_actor<K>::convert(k),
  1241. as_actor<L>::convert(l),
  1242. as_actor<M>::convert(m),
  1243. as_actor<N>::convert(n)
  1244. ));
  1245. }
  1246. //////////////////////////////////
  1247. template <
  1248. typename T, typename A, typename B, typename C, typename D, typename E,
  1249. typename F, typename G, typename H, typename I, typename J, typename K,
  1250. typename L, typename M, typename N, typename O
  1251. >
  1252. inline typename impl::make_composite<
  1253. construct_15<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, O>::type
  1254. construct_(
  1255. A const& a, B const& b, C const& c, D const& d, E const& e,
  1256. F const& f, G const& g, H const& h, I const& i, J const& j,
  1257. K const& k, L const& l, M const& m, N const& n, O const& o)
  1258. {
  1259. typedef
  1260. impl::make_composite<
  1261. construct_15<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O
  1262. >
  1263. make_composite_t;
  1264. typedef typename make_composite_t::type type_t;
  1265. typedef typename make_composite_t::composite_type composite_type_t;
  1266. return type_t(composite_type_t(construct_15<T>(),
  1267. as_actor<A>::convert(a),
  1268. as_actor<B>::convert(b),
  1269. as_actor<C>::convert(c),
  1270. as_actor<D>::convert(d),
  1271. as_actor<E>::convert(e),
  1272. as_actor<F>::convert(f),
  1273. as_actor<G>::convert(g),
  1274. as_actor<H>::convert(h),
  1275. as_actor<I>::convert(i),
  1276. as_actor<J>::convert(j),
  1277. as_actor<K>::convert(k),
  1278. as_actor<L>::convert(l),
  1279. as_actor<M>::convert(m),
  1280. as_actor<N>::convert(n),
  1281. as_actor<O>::convert(o)
  1282. ));
  1283. }
  1284. #endif
  1285. #endif
  1286. #endif
  1287. #endif
  1288. ///////////////////////////////////////////////////////////////////////////////
  1289. } // namespace phoenix
  1290. #endif // PHOENIX_CASTS_HPP