First public contribution.
1 /*=============================================================================
3 Copyright (c) 2001-2003 Joel de Guzman
4 Copyright (c) 2001-2003 Hartmut Kaiser
5 Copyright (c) 2003 Vaclav Vesely
7 Use, modification and distribution is subject to the Boost Software
8 License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
9 http://www.boost.org/LICENSE_1_0.txt)
10 ==============================================================================*/
12 #ifndef PHOENIX_NEW_HPP
13 #define PHOENIX_NEW_HPP
15 ///////////////////////////////////////////////////////////////////////////////
16 #include <boost/spirit/phoenix/actor.hpp>
17 #include <boost/spirit/phoenix/composite.hpp>
18 #include <boost/static_assert.hpp>
20 ///////////////////////////////////////////////////////////////////////////////
23 ///////////////////////////////////////////////////////////////////////////////
25 // Phoenix predefined maximum new_ limit. This limit defines the maximum
26 // number of parameters supported for calles to the set of new_ template
27 // functions (lazy object construction, see below). This number defaults to 3.
28 // The actual maximum is rounded up in multiples of 3. Thus, if this value
29 // is 4, the actual limit is 6. The ultimate maximum limit in this
30 // implementation is 15.
31 // PHOENIX_CONSTRUCT_LIMIT should NOT be greater than PHOENIX_LIMIT!
33 #if !defined(PHOENIX_CONSTRUCT_LIMIT)
34 #define PHOENIX_CONSTRUCT_LIMIT PHOENIX_LIMIT
37 // ensure PHOENIX_CONSTRUCT_LIMIT <= PHOENIX_LIMIT
38 BOOST_STATIC_ASSERT(PHOENIX_CONSTRUCT_LIMIT <= PHOENIX_LIMIT);
40 // ensure PHOENIX_CONSTRUCT_LIMIT <= 15
41 BOOST_STATIC_ASSERT(PHOENIX_CONSTRUCT_LIMIT <= 15);
43 ///////////////////////////////////////////////////////////////////////////////
47 // Lazy object construction
49 // The set of new_<> template classes and functions provide a way
50 // of lazily constructing certain object from a arbitrary set of
51 // actors during parsing.
52 // The new_ templates are (syntactically) used very much like
53 // the well known C++ casts:
55 // A *a = new_<A>(...arbitrary list of actors...);
57 // where the given parameters are submitted as parameters to the
58 // contructor of the object of type A. (This certainly implies, that
59 // type A has a constructor with a fitting set of parameter types
62 // The maximum number of needed parameters is controlled through the
63 // preprocessor constant PHOENIX_CONSTRUCT_LIMIT. Note though, that this
64 // limit should not be greater than PHOENIX_LIMIT.
66 ///////////////////////////////////////////////////////////////////////////////
71 typedef T* result_type;
87 #if PHOENIX_CONSTRUCT_LIMIT > 3
92 #if PHOENIX_CONSTRUCT_LIMIT > 6
97 #if PHOENIX_CONSTRUCT_LIMIT > 9
102 #if PHOENIX_CONSTRUCT_LIMIT > 12
111 struct result { typedef T* type; };
113 T* operator()() const {
117 template <typename A>
118 T* operator()(A const& a) const {
122 template <typename A, typename B>
123 T* operator()(A const& a, B const& b) const {
127 template <typename A, typename B, typename C>
128 T* operator()(A const& a, B const& b, C const& c) const {
129 return new T(a, b, c);
132 #if PHOENIX_CONSTRUCT_LIMIT > 3
134 typename A, typename B, typename C, typename D
137 A const& a, B const& b, C const& c, D const& d) const
139 return new T(a, b, c, d);
143 typename A, typename B, typename C, typename D, typename E
146 A const& a, B const& b, C const& c, D const& d, E const& e) const
148 return new T(a, b, c, d, e);
152 typename A, typename B, typename C, typename D, typename E,
156 A const& a, B const& b, C const& c, D const& d, E const& e,
159 return new T(a, b, c, d, e, f);
162 #if PHOENIX_CONSTRUCT_LIMIT > 6
164 typename A, typename B, typename C, typename D, typename E,
165 typename F, typename G
168 A const& a, B const& b, C const& c, D const& d, E const& e,
169 F const& f, G const& g) const
171 return new T(a, b, c, d, e, f, g);
175 typename A, typename B, typename C, typename D, typename E,
176 typename F, typename G, typename H
179 A const& a, B const& b, C const& c, D const& d, E const& e,
180 F const& f, G const& g, H const& h) const
182 return new T(a, b, c, d, e, f, g, h);
186 typename A, typename B, typename C, typename D, typename E,
187 typename F, typename G, typename H, typename I
190 A const& a, B const& b, C const& c, D const& d, E const& e,
191 F const& f, G const& g, H const& h, I const& i) const
193 return new T(a, b, c, d, e, f, g, h, i);
196 #if PHOENIX_CONSTRUCT_LIMIT > 9
198 typename A, typename B, typename C, typename D, typename E,
199 typename F, typename G, typename H, typename I, typename J
202 A const& a, B const& b, C const& c, D const& d, E const& e,
203 F const& f, G const& g, H const& h, I const& i, J const& j) const
205 return new T(a, b, c, d, e, f, g, h, i, j);
209 typename A, typename B, typename C, typename D, typename E,
210 typename F, typename G, typename H, typename I, typename J,
214 A const& a, B const& b, C const& c, D const& d, E const& e,
215 F const& f, G const& g, H const& h, I const& i, J const& j,
218 return new T(a, b, c, d, e, f, g, h, i, j, k);
222 typename A, typename B, typename C, typename D, typename E,
223 typename F, typename G, typename H, typename I, typename J,
224 typename K, typename L
227 A const& a, B const& b, C const& c, D const& d, E const& e,
228 F const& f, G const& g, H const& h, I const& i, J const& j,
229 K const& k, L const& l) const
231 return new T(a, b, c, d, e, f, g, h, i, j, k, l);
234 #if PHOENIX_CONSTRUCT_LIMIT > 12
236 typename A, typename B, typename C, typename D, typename E,
237 typename F, typename G, typename H, typename I, typename J,
238 typename K, typename L, typename M
241 A const& a, B const& b, C const& c, D const& d, E const& e,
242 F const& f, G const& g, H const& h, I const& i, J const& j,
243 K const& k, L const& l, M const& m) const
245 return new T(a, b, c, d, e, f, g, h, i, j, k, l, m);
249 typename A, typename B, typename C, typename D, typename E,
250 typename F, typename G, typename H, typename I, typename J,
251 typename K, typename L, typename M, typename N
254 A const& a, B const& b, C const& c, D const& d, E const& e,
255 F const& f, G const& g, H const& h, I const& i, J const& j,
256 K const& k, L const& l, M const& m, N const& n) const
258 return new T(a, b, c, d, e, f, g, h, i, j, k, l, m, n);
262 typename A, typename B, typename C, typename D, typename E,
263 typename F, typename G, typename H, typename I, typename J,
264 typename K, typename L, typename M, typename N, typename O
267 A const& a, B const& b, C const& c, D const& d, E const& e,
268 F const& f, G const& g, H const& h, I const& i, J const& j,
269 K const& k, L const& l, M const& m, N const& n, O const& o) const
271 return new T(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o);
280 template <typename T>
286 struct result { typedef T* type; };
288 template <typename A>
289 T* operator()(A const& a) const {
295 template <typename T>
302 struct result { typedef T* type; };
304 template <typename A, typename B>
305 T* operator()(A const& a, B const& b) const {
311 template <typename T>
319 struct result { typedef T* type; };
321 template <typename A, typename B, typename C>
322 T* operator()(A const& a, B const& b, C const& c) const {
323 return new T(a, b, c);
327 #if PHOENIX_CONSTRUCT_LIMIT > 3
328 template <typename T>
337 struct result { typedef T* type; };
341 typename A, typename B, typename C, typename D
344 A const& a, B const& b, C const& c, D const& d) const
346 return new T(a, b, c, d);
351 template <typename T>
361 struct result { typedef T* type; };
364 typename A, typename B, typename C, typename D, typename E
367 A const& a, B const& b, C const& c, D const& d, E const& e) const
369 return new T(a, b, c, d, e);
374 template <typename T>
385 struct result { typedef T* type; };
388 typename A, typename B, typename C, typename D, typename E,
392 A const& a, B const& b, C const& c, D const& d, E const& e,
395 return new T(a, b, c, d, e, f);
401 #if PHOENIX_CONSTRUCT_LIMIT > 6
402 template <typename T>
414 struct result { typedef T* type; };
417 typename A, typename B, typename C, typename D, typename E,
418 typename F, typename G
421 A const& a, B const& b, C const& c, D const& d, E const& e,
422 F const& f, G const& g) const
424 return new T(a, b, c, d, e, f, g);
428 template <typename T>
441 struct result { typedef T* type; };
444 typename A, typename B, typename C, typename D, typename E,
445 typename F, typename G, typename H
448 A const& a, B const& b, C const& c, D const& d, E const& e,
449 F const& f, G const& g, H const& h) const
451 return new T(a, b, c, d, e, f, g, h);
455 template <typename T>
469 struct result { typedef T* type; };
472 typename A, typename B, typename C, typename D, typename E,
473 typename F, typename G, typename H, typename I
476 A const& a, B const& b, C const& c, D const& d, E const& e,
477 F const& f, G const& g, H const& h, I const& i) const
479 return new T(a, b, c, d, e, f, g, h, i);
485 #if PHOENIX_CONSTRUCT_LIMIT > 9
486 template <typename T>
501 struct result { typedef T* type; };
505 typename A, typename B, typename C, typename D, typename E,
506 typename F, typename G, typename H, typename I, typename J
509 A const& a, B const& b, C const& c, D const& d, E const& e,
510 F const& f, G const& g, H const& h, I const& i, J const& j) const
512 return new T(a, b, c, d, e, f, g, h, i, j);
516 template <typename T>
532 struct result { typedef T* type; };
536 typename A, typename B, typename C, typename D, typename E,
537 typename F, typename G, typename H, typename I, typename J,
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, J const& j,
545 return new T(a, b, c, d, e, f, g, h, i, j, k);
550 template <typename T>
567 struct result { typedef T* type; };
571 typename A, typename B, typename C, typename D, typename E,
572 typename F, typename G, typename H, typename I, typename J,
573 typename K, typename L
576 A const& a, B const& b, C const& c, D const& d, E const& e,
577 F const& f, G const& g, H const& h, I const& i, J const& j,
578 K const& k, L const& l) const
580 return new T(a, b, c, d, f, e, g, h, i, j, k, l);
585 #if PHOENIX_CONSTRUCT_LIMIT > 12
586 template <typename T>
604 struct result { typedef T* type; };
608 typename A, typename B, typename C, typename D, typename E,
609 typename F, typename G, typename H, typename I, typename J,
610 typename K, typename L, typename M
613 A const& a, B const& b, C const& c, D const& d, E const& e,
614 F const& f, G const& g, H const& h, I const& i, J const& j,
615 K const& k, L const& l, M const& m) const
617 return new T(a, b, c, d, e, f, g, h, i, j, k, l, m);
621 template <typename T>
640 struct result { typedef T* type; };
644 typename A, typename B, typename C, typename D, typename E,
645 typename F, typename G, typename H, typename I, typename J,
646 typename K, typename L, typename M, typename N
649 A const& a, B const& b, C const& c, D const& d, E const& e,
650 F const& f, G const& g, H const& h, I const& i, J const& j,
651 K const& k, L const& l, M const& m, N const& n) const
653 return new T(a, b, c, d, e, f, g, h, i, j, k, l, m, n);
658 template <typename T>
678 struct result { typedef T* type; };
682 typename A, typename B, typename C, typename D, typename E,
683 typename F, typename G, typename H, typename I, typename J,
684 typename K, typename L, typename M, typename N, typename O
687 A const& a, B const& b, C const& c, D const& d, E const& e,
688 F const& f, G const& g, H const& h, I const& i, J const& j,
689 K const& k, L const& l, M const& m, N const& n, O const& o) const
691 return new T(a, b, c, d, f, e, g, h, i, j, k, l, m, n, o);
698 #if defined(__BORLANDC__) || (defined(__MWERKS__) && (__MWERKS__ <= 0x3002))
700 ///////////////////////////////////////////////////////////////////////////////
702 // The following specializations are needed because Borland and CodeWarrior
703 // does not accept default template arguments in nested template classes in
704 // classes (i.e new_l::result)
706 ///////////////////////////////////////////////////////////////////////////////
707 template <typename T, typename TupleT>
708 struct composite0_result<new_l_0<T>, TupleT> {
713 //////////////////////////////////
714 template <typename T, typename TupleT,
716 struct composite1_result<new_l<T>, TupleT, A> {
721 //////////////////////////////////
722 template <typename T, typename TupleT,
723 typename A, typename B>
724 struct composite2_result<new_l<T>, TupleT, A, B> {
729 //////////////////////////////////
730 template <typename T, typename TupleT,
731 typename A, typename B, typename C>
732 struct composite3_result<new_l<T>, TupleT, A, B, C> {
737 #if PHOENIX_LIMIT > 3
738 //////////////////////////////////
739 template <typename T, typename TupleT,
740 typename A, typename B, typename C, typename D>
741 struct composite4_result<new_l<T>, TupleT,
747 //////////////////////////////////
748 template <typename T, typename TupleT,
749 typename A, typename B, typename C, typename D, typename E>
750 struct composite5_result<new_l<T>, TupleT,
756 //////////////////////////////////
757 template <typename T, typename TupleT,
758 typename A, typename B, typename C, typename D, typename E,
760 struct composite6_result<new_l<T>, TupleT,
766 #if PHOENIX_LIMIT > 6
767 //////////////////////////////////
768 template <typename T, typename TupleT,
769 typename A, typename B, typename C, typename D, typename E,
770 typename F, typename G>
771 struct composite7_result<new_l<T>, TupleT,
772 A, B, C, D, E, F, G> {
777 //////////////////////////////////
778 template <typename T, typename TupleT,
779 typename A, typename B, typename C, typename D, typename E,
780 typename F, typename G, typename H>
781 struct composite8_result<new_l<T>, TupleT,
782 A, B, C, D, E, F, G, H> {
787 //////////////////////////////////
788 template <typename T, typename TupleT,
789 typename A, typename B, typename C, typename D, typename E,
790 typename F, typename G, typename H, typename I>
791 struct composite9_result<new_l<T>, TupleT,
792 A, B, C, D, E, F, G, H, I> {
797 #if PHOENIX_LIMIT > 9
798 //////////////////////////////////
799 template <typename T, typename TupleT,
800 typename A, typename B, typename C, typename D, typename E,
801 typename F, typename G, typename H, typename I, typename J>
802 struct composite10_result<new_l<T>, TupleT,
803 A, B, C, D, E, F, G, H, I, J> {
808 //////////////////////////////////
809 template <typename T, typename TupleT,
810 typename A, typename B, typename C, typename D, typename E,
811 typename F, typename G, typename H, typename I, typename J,
813 struct composite11_result<new_l<T>, TupleT,
814 A, B, C, D, E, F, G, H, I, J, K> {
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 typename K, typename L>
824 struct composite12_result<new_l<T>, TupleT,
825 A, B, C, D, E, F, G, H, I, J, K, L> {
830 #if PHOENIX_LIMIT > 12
831 //////////////////////////////////
832 template <typename T, typename TupleT,
833 typename A, typename B, typename C, typename D, typename E,
834 typename F, typename G, typename H, typename I, typename J,
835 typename K, typename L, typename M>
836 struct composite13_result<new_l<T>, TupleT,
837 A, B, C, D, E, F, G, H, I, J, K, L, M> {
842 //////////////////////////////////
843 template <typename T, typename TupleT,
844 typename A, typename B, typename C, typename D, typename E,
845 typename F, typename G, typename H, typename I, typename J,
846 typename K, typename L, typename M, typename N>
847 struct composite14_result<new_l<T>, TupleT,
848 A, B, C, D, E, F, G, H, I, J, K, L, M, N> {
853 //////////////////////////////////
854 template <typename T, typename TupleT,
855 typename A, typename B, typename C, typename D, typename E,
856 typename F, typename G, typename H, typename I, typename J,
857 typename K, typename L, typename M, typename N, typename O>
858 struct composite15_result<new_l<T>, TupleT,
859 A, B, C, D, E, F, G, H, I, J, K, L, M, N, O> {
870 //////////////////////////////////
871 template <typename T>
872 inline typename impl::make_composite<new_l_0<T> >::type
875 typedef impl::make_composite<new_l_0<T> > make_composite_t;
876 typedef typename make_composite_t::type type_t;
877 typedef typename make_composite_t::composite_type composite_type_t;
879 return type_t(composite_type_t(new_l_0<T>()));
882 //////////////////////////////////
883 template <typename T, typename A>
884 inline typename impl::make_composite<new_1<T>, A>::type
887 typedef impl::make_composite<new_1<T>, A> make_composite_t;
888 typedef typename make_composite_t::type type_t;
889 typedef typename make_composite_t::composite_type composite_type_t;
891 return type_t(composite_type_t(new_1<T>(),
892 as_actor<A>::convert(a)
896 //////////////////////////////////
897 template <typename T, typename A, typename B>
898 inline typename impl::make_composite<new_2<T>, A, B>::type
899 new_(A const& a, B const& b)
901 typedef impl::make_composite<new_2<T>, A, B> make_composite_t;
902 typedef typename make_composite_t::type type_t;
903 typedef typename make_composite_t::composite_type composite_type_t;
905 return type_t(composite_type_t(new_2<T>(),
906 as_actor<A>::convert(a),
907 as_actor<B>::convert(b)
911 //////////////////////////////////
912 template <typename T, typename A, typename B, typename C>
913 inline typename impl::make_composite<new_3<T>, A, B, C>::type
914 new_(A const& a, B const& b, C const& c)
916 typedef impl::make_composite<new_3<T>, A, B, C> make_composite_t;
917 typedef typename make_composite_t::type type_t;
918 typedef typename make_composite_t::composite_type composite_type_t;
920 return type_t(composite_type_t(new_3<T>(),
921 as_actor<A>::convert(a),
922 as_actor<B>::convert(b),
923 as_actor<C>::convert(c)
927 #if PHOENIX_CONSTRUCT_LIMIT > 3
928 //////////////////////////////////
930 typename T, typename A, typename B, typename C, typename D
932 inline typename impl::make_composite<new_4<T>, A, B, C, D>::type
934 A const& a, B const& b, C const& c, D const& d)
937 impl::make_composite<new_4<T>, A, B, C, D>
939 typedef typename make_composite_t::type type_t;
940 typedef typename make_composite_t::composite_type composite_type_t;
942 return type_t(composite_type_t(new_4<T>(),
943 as_actor<A>::convert(a),
944 as_actor<B>::convert(b),
945 as_actor<C>::convert(c),
946 as_actor<D>::convert(d)
950 //////////////////////////////////
952 typename T, typename A, typename B, typename C, typename D, typename E
954 inline typename impl::make_composite<new_5<T>, A, B, C, D, E>::type
956 A const& a, B const& b, C const& c, D const& d, E const& e)
959 impl::make_composite<new_5<T>, A, B, C, D, E>
961 typedef typename make_composite_t::type type_t;
962 typedef typename make_composite_t::composite_type composite_type_t;
964 return type_t(composite_type_t(new_5<T>(),
965 as_actor<A>::convert(a),
966 as_actor<B>::convert(b),
967 as_actor<C>::convert(c),
968 as_actor<D>::convert(d),
969 as_actor<E>::convert(e)
973 //////////////////////////////////
975 typename T, typename A, typename B, typename C, typename D, typename E,
978 inline typename impl::make_composite<new_6<T>, A, B, C, D, E, F>::type
980 A const& a, B const& b, C const& c, D const& d, E const& e,
984 impl::make_composite<new_6<T>, A, B, C, D, E, F>
986 typedef typename make_composite_t::type type_t;
987 typedef typename make_composite_t::composite_type composite_type_t;
989 return type_t(composite_type_t(new_6<T>(),
990 as_actor<A>::convert(a),
991 as_actor<B>::convert(b),
992 as_actor<C>::convert(c),
993 as_actor<D>::convert(d),
994 as_actor<E>::convert(e),
995 as_actor<F>::convert(f)
999 #if PHOENIX_CONSTRUCT_LIMIT > 6
1000 //////////////////////////////////
1002 typename T, typename A, typename B, typename C, typename D, typename E,
1003 typename F, typename G
1005 inline typename impl::make_composite<new_7<T>, A, B, C, D, E, F, G>::type
1007 A const& a, B const& b, C const& c, D const& d, E const& e,
1008 F const& f, G const& g)
1011 impl::make_composite<new_7<T>, A, B, C, D, E, F, G>
1013 typedef typename make_composite_t::type type_t;
1014 typedef typename make_composite_t::composite_type composite_type_t;
1016 return type_t(composite_type_t(new_7<T>(),
1017 as_actor<A>::convert(a),
1018 as_actor<B>::convert(b),
1019 as_actor<C>::convert(c),
1020 as_actor<D>::convert(d),
1021 as_actor<E>::convert(e),
1022 as_actor<F>::convert(f),
1023 as_actor<G>::convert(g)
1027 //////////////////////////////////
1029 typename T, typename A, typename B, typename C, typename D, typename E,
1030 typename F, typename G, typename H
1032 inline typename impl::make_composite<new_8<T>, A, B, C, D, E, F, G, H>::type
1034 A const& a, B const& b, C const& c, D const& d, E const& e,
1035 F const& f, G const& g, H const& h)
1038 impl::make_composite<new_8<T>, A, B, C, D, E, F, G, H>
1040 typedef typename make_composite_t::type type_t;
1041 typedef typename make_composite_t::composite_type composite_type_t;
1043 return type_t(composite_type_t(new_8<T>(),
1044 as_actor<A>::convert(a),
1045 as_actor<B>::convert(b),
1046 as_actor<C>::convert(c),
1047 as_actor<D>::convert(d),
1048 as_actor<E>::convert(e),
1049 as_actor<F>::convert(f),
1050 as_actor<G>::convert(g),
1051 as_actor<H>::convert(h)
1055 //////////////////////////////////
1057 typename T, typename A, typename B, typename C, typename D, typename E,
1058 typename F, typename G, typename H, typename I
1060 inline typename impl::make_composite<new_9<T>, A, B, C, D, E, F, G, H, I>::type
1062 A const& a, B const& b, C const& c, D const& d, E const& e,
1063 F const& f, G const& g, H const& h, I const& i)
1066 impl::make_composite<new_9<T>, A, B, C, D, E, F, G, H, I>
1068 typedef typename make_composite_t::type type_t;
1069 typedef typename make_composite_t::composite_type composite_type_t;
1071 return type_t(composite_type_t(new_9<T>(),
1072 as_actor<A>::convert(a),
1073 as_actor<B>::convert(b),
1074 as_actor<C>::convert(c),
1075 as_actor<D>::convert(d),
1076 as_actor<E>::convert(e),
1077 as_actor<F>::convert(f),
1078 as_actor<G>::convert(g),
1079 as_actor<H>::convert(h),
1080 as_actor<I>::convert(i)
1084 #if PHOENIX_CONSTRUCT_LIMIT > 9
1085 //////////////////////////////////
1087 typename T, typename A, typename B, typename C, typename D, typename E,
1088 typename F, typename G, typename H, typename I, typename J
1090 inline typename impl::make_composite<
1091 new_10<T>, A, B, C, D, E, F, G, H, I, J>::type
1093 A const& a, B const& b, C const& c, D const& d, E const& e,
1094 F const& f, G const& g, H const& h, I const& i, J const& j)
1097 impl::make_composite<
1098 new_10<T>, A, B, C, D, E, F, G, H, I, J
1101 typedef typename make_composite_t::type type_t;
1102 typedef typename make_composite_t::composite_type composite_type_t;
1104 return type_t(composite_type_t(new_10<T>(),
1105 as_actor<A>::convert(a),
1106 as_actor<B>::convert(b),
1107 as_actor<C>::convert(c),
1108 as_actor<D>::convert(d),
1109 as_actor<E>::convert(e),
1110 as_actor<F>::convert(f),
1111 as_actor<G>::convert(g),
1112 as_actor<H>::convert(h),
1113 as_actor<I>::convert(i),
1114 as_actor<J>::convert(j)
1118 //////////////////////////////////
1120 typename T, typename A, typename B, typename C, typename D, typename E,
1121 typename F, typename G, typename H, typename I, typename J, typename K
1123 inline typename impl::make_composite<
1124 new_11<T>, A, B, C, D, E, F, G, H, I, J, K>::type
1126 A const& a, B const& b, C const& c, D const& d, E const& e,
1127 F const& f, G const& g, H const& h, I const& i, J const& j,
1131 impl::make_composite<
1132 new_11<T>, A, B, C, D, E, F, G, H, I, J, K
1135 typedef typename make_composite_t::type type_t;
1136 typedef typename make_composite_t::composite_type composite_type_t;
1138 return type_t(composite_type_t(new_11<T>(),
1139 as_actor<A>::convert(a),
1140 as_actor<B>::convert(b),
1141 as_actor<C>::convert(c),
1142 as_actor<D>::convert(d),
1143 as_actor<E>::convert(e),
1144 as_actor<F>::convert(f),
1145 as_actor<G>::convert(g),
1146 as_actor<H>::convert(h),
1147 as_actor<I>::convert(i),
1148 as_actor<J>::convert(j),
1149 as_actor<K>::convert(k)
1153 //////////////////////////////////
1155 typename T, typename A, typename B, typename C, typename D, typename E,
1156 typename F, typename G, typename H, typename I, typename J, typename K,
1159 inline typename impl::make_composite<
1160 new_12<T>, A, B, C, D, E, F, G, H, I, J, K, L>::type
1162 A const& a, B const& b, C const& c, D const& d, E const& e,
1163 F const& f, G const& g, H const& h, I const& i, J const& j,
1164 K const& k, L const& l)
1167 impl::make_composite<
1168 new_12<T>, A, B, C, D, E, F, G, H, I, J, K, L
1171 typedef typename make_composite_t::type type_t;
1172 typedef typename make_composite_t::composite_type composite_type_t;
1174 return type_t(composite_type_t(new_12<T>(),
1175 as_actor<A>::convert(a),
1176 as_actor<B>::convert(b),
1177 as_actor<C>::convert(c),
1178 as_actor<D>::convert(d),
1179 as_actor<E>::convert(e),
1180 as_actor<F>::convert(f),
1181 as_actor<G>::convert(g),
1182 as_actor<H>::convert(h),
1183 as_actor<I>::convert(i),
1184 as_actor<J>::convert(j),
1185 as_actor<K>::convert(k),
1186 as_actor<L>::convert(l)
1190 #if PHOENIX_CONSTRUCT_LIMIT > 12
1191 //////////////////////////////////
1193 typename T, typename A, typename B, typename C, typename D, typename E,
1194 typename F, typename G, typename H, typename I, typename J, typename K,
1195 typename L, typename M
1197 inline typename impl::make_composite<
1198 new_13<T>, A, B, C, D, E, F, G, H, I, J, K, L, M>::type
1200 A const& a, B const& b, C const& c, D const& d, E const& e,
1201 F const& f, G const& g, H const& h, I const& i, J const& j,
1202 K const& k, L const& l, M const& m)
1205 impl::make_composite<
1206 new_13<T>, A, B, C, D, E, F, G, H, I, J, K, L, M
1209 typedef typename make_composite_t::type type_t;
1210 typedef typename make_composite_t::composite_type composite_type_t;
1212 return type_t(composite_type_t(new_13<T>(),
1213 as_actor<A>::convert(a),
1214 as_actor<B>::convert(b),
1215 as_actor<C>::convert(c),
1216 as_actor<D>::convert(d),
1217 as_actor<E>::convert(e),
1218 as_actor<F>::convert(f),
1219 as_actor<G>::convert(g),
1220 as_actor<H>::convert(h),
1221 as_actor<I>::convert(i),
1222 as_actor<J>::convert(j),
1223 as_actor<K>::convert(k),
1224 as_actor<L>::convert(l),
1225 as_actor<M>::convert(m)
1229 //////////////////////////////////
1231 typename T, typename A, typename B, typename C, typename D, typename E,
1232 typename F, typename G, typename H, typename I, typename J, typename K,
1233 typename L, typename M, typename N
1235 inline typename impl::make_composite<
1236 new_14<T>, A, B, C, D, E, F, G, H, I, J, K, L, M>::type
1238 A const& a, B const& b, C const& c, D const& d, E const& e,
1239 F const& f, G const& g, H const& h, I const& i, J const& j,
1240 K const& k, L const& l, M const& m, N const& n)
1243 impl::make_composite<
1244 new_14<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, N
1247 typedef typename make_composite_t::type type_t;
1248 typedef typename make_composite_t::composite_type composite_type_t;
1250 return type_t(composite_type_t(new_14<T>(),
1251 as_actor<A>::convert(a),
1252 as_actor<B>::convert(b),
1253 as_actor<C>::convert(c),
1254 as_actor<D>::convert(d),
1255 as_actor<E>::convert(e),
1256 as_actor<F>::convert(f),
1257 as_actor<G>::convert(g),
1258 as_actor<H>::convert(h),
1259 as_actor<I>::convert(i),
1260 as_actor<J>::convert(j),
1261 as_actor<K>::convert(k),
1262 as_actor<L>::convert(l),
1263 as_actor<M>::convert(m),
1264 as_actor<N>::convert(n)
1268 //////////////////////////////////
1270 typename T, typename A, typename B, typename C, typename D, typename E,
1271 typename F, typename G, typename H, typename I, typename J, typename K,
1272 typename L, typename M, typename N, typename O
1274 inline typename impl::make_composite<
1275 new_15<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, O>::type
1277 A const& a, B const& b, C const& c, D const& d, E const& e,
1278 F const& f, G const& g, H const& h, I const& i, J const& j,
1279 K const& k, L const& l, M const& m, N const& n, O const& o)
1282 impl::make_composite<
1283 new_15<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O
1286 typedef typename make_composite_t::type type_t;
1287 typedef typename make_composite_t::composite_type composite_type_t;
1289 return type_t(composite_type_t(new_15<T>(),
1290 as_actor<A>::convert(a),
1291 as_actor<B>::convert(b),
1292 as_actor<C>::convert(c),
1293 as_actor<D>::convert(d),
1294 as_actor<E>::convert(e),
1295 as_actor<F>::convert(f),
1296 as_actor<G>::convert(g),
1297 as_actor<H>::convert(h),
1298 as_actor<I>::convert(i),
1299 as_actor<J>::convert(j),
1300 as_actor<K>::convert(k),
1301 as_actor<L>::convert(l),
1302 as_actor<M>::convert(m),
1303 as_actor<N>::convert(n),
1304 as_actor<O>::convert(o)
1313 ///////////////////////////////////////////////////////////////////////////////
1314 } // namespace phoenix
1316 #endif // PHOENIX_NEW_HPP