1 /*=============================================================================
3 Copyright (c) 2001-2003 Joel de Guzman
4 Copyright (c) 2001-2003 Hartmut Kaiser
5 Copyright (c) 2003 Vaclav Vesely
7 Distributed under the Boost Software License, Version 1.0. (See accompanying
8 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9 ==============================================================================*/
11 #ifndef PHOENIX_NEW_HPP
12 #define PHOENIX_NEW_HPP
14 ///////////////////////////////////////////////////////////////////////////////
15 #include <boost/spirit/home/classic/phoenix/actor.hpp>
16 #include <boost/spirit/home/classic/phoenix/composite.hpp>
17 #include <boost/static_assert.hpp>
19 ///////////////////////////////////////////////////////////////////////////////
22 ///////////////////////////////////////////////////////////////////////////////
24 // Phoenix predefined maximum new_ limit. This limit defines the maximum
25 // number of parameters supported for calles to the set of new_ template
26 // functions (lazy object construction, see below). This number defaults to 3.
27 // The actual maximum is rounded up in multiples of 3. Thus, if this value
28 // is 4, the actual limit is 6. The ultimate maximum limit in this
29 // implementation is 15.
30 // PHOENIX_CONSTRUCT_LIMIT should NOT be greater than PHOENIX_LIMIT!
32 #if !defined(PHOENIX_CONSTRUCT_LIMIT)
33 #define PHOENIX_CONSTRUCT_LIMIT PHOENIX_LIMIT
36 // ensure PHOENIX_CONSTRUCT_LIMIT <= PHOENIX_LIMIT
37 BOOST_STATIC_ASSERT(PHOENIX_CONSTRUCT_LIMIT <= PHOENIX_LIMIT);
39 // ensure PHOENIX_CONSTRUCT_LIMIT <= 15
40 BOOST_STATIC_ASSERT(PHOENIX_CONSTRUCT_LIMIT <= 15);
42 ///////////////////////////////////////////////////////////////////////////////
46 // Lazy object construction
48 // The set of new_<> template classes and functions provide a way
49 // of lazily constructing certain object from a arbitrary set of
50 // actors during parsing.
51 // The new_ templates are (syntactically) used very much like
52 // the well known C++ casts:
54 // A *a = new_<A>(...arbitrary list of actors...);
56 // where the given parameters are submitted as parameters to the
57 // contructor of the object of type A. (This certainly implies, that
58 // type A has a constructor with a fitting set of parameter types
61 // The maximum number of needed parameters is controlled through the
62 // preprocessor constant PHOENIX_CONSTRUCT_LIMIT. Note though, that this
63 // limit should not be greater than PHOENIX_LIMIT.
65 ///////////////////////////////////////////////////////////////////////////////
70 typedef T* result_type;
86 #if PHOENIX_CONSTRUCT_LIMIT > 3
91 #if PHOENIX_CONSTRUCT_LIMIT > 6
96 #if PHOENIX_CONSTRUCT_LIMIT > 9
101 #if PHOENIX_CONSTRUCT_LIMIT > 12
110 struct result { typedef T* type; };
112 T* operator()() const {
116 template <typename A>
117 T* operator()(A const& a) const {
121 template <typename A, typename B>
122 T* operator()(A const& a, B const& b) const {
126 template <typename A, typename B, typename C>
127 T* operator()(A const& a, B const& b, C const& c) const {
128 return new T(a, b, c);
131 #if PHOENIX_CONSTRUCT_LIMIT > 3
133 typename A, typename B, typename C, typename D
136 A const& a, B const& b, C const& c, D const& d) const
138 return new T(a, b, c, d);
142 typename A, typename B, typename C, typename D, typename E
145 A const& a, B const& b, C const& c, D const& d, E const& e) const
147 return new T(a, b, c, d, e);
151 typename A, typename B, typename C, typename D, typename E,
155 A const& a, B const& b, C const& c, D const& d, E const& e,
158 return new T(a, b, c, d, e, f);
161 #if PHOENIX_CONSTRUCT_LIMIT > 6
163 typename A, typename B, typename C, typename D, typename E,
164 typename F, typename G
167 A const& a, B const& b, C const& c, D const& d, E const& e,
168 F const& f, G const& g) const
170 return new T(a, b, c, d, e, f, g);
174 typename A, typename B, typename C, typename D, typename E,
175 typename F, typename G, typename H
178 A const& a, B const& b, C const& c, D const& d, E const& e,
179 F const& f, G const& g, H const& h) const
181 return new T(a, b, c, d, e, f, g, h);
185 typename A, typename B, typename C, typename D, typename E,
186 typename F, typename G, typename H, typename I
189 A const& a, B const& b, C const& c, D const& d, E const& e,
190 F const& f, G const& g, H const& h, I const& i) const
192 return new T(a, b, c, d, e, f, g, h, i);
195 #if PHOENIX_CONSTRUCT_LIMIT > 9
197 typename A, typename B, typename C, typename D, typename E,
198 typename F, typename G, typename H, typename I, typename J
201 A const& a, B const& b, C const& c, D const& d, E const& e,
202 F const& f, G const& g, H const& h, I const& i, J const& j) const
204 return new T(a, b, c, d, e, f, g, h, i, j);
208 typename A, typename B, typename C, typename D, typename E,
209 typename F, typename G, typename H, typename I, typename J,
213 A const& a, B const& b, C const& c, D const& d, E const& e,
214 F const& f, G const& g, H const& h, I const& i, J const& j,
217 return new T(a, b, c, d, e, f, g, h, i, j, k);
221 typename A, typename B, typename C, typename D, typename E,
222 typename F, typename G, typename H, typename I, typename J,
223 typename K, typename L
226 A const& a, B const& b, C const& c, D const& d, E const& e,
227 F const& f, G const& g, H const& h, I const& i, J const& j,
228 K const& k, L const& l) const
230 return new T(a, b, c, d, e, f, g, h, i, j, k, l);
233 #if PHOENIX_CONSTRUCT_LIMIT > 12
235 typename A, typename B, typename C, typename D, typename E,
236 typename F, typename G, typename H, typename I, typename J,
237 typename K, typename L, typename M
240 A const& a, B const& b, C const& c, D const& d, E const& e,
241 F const& f, G const& g, H const& h, I const& i, J const& j,
242 K const& k, L const& l, M const& m) const
244 return new T(a, b, c, d, e, f, g, h, i, j, k, l, m);
248 typename A, typename B, typename C, typename D, typename E,
249 typename F, typename G, typename H, typename I, typename J,
250 typename K, typename L, typename M, typename N
253 A const& a, B const& b, C const& c, D const& d, E const& e,
254 F const& f, G const& g, H const& h, I const& i, J const& j,
255 K const& k, L const& l, M const& m, N const& n) const
257 return new T(a, b, c, d, e, f, g, h, i, j, k, l, m, n);
261 typename A, typename B, typename C, typename D, typename E,
262 typename F, typename G, typename H, typename I, typename J,
263 typename K, typename L, typename M, typename N, typename O
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, I const& i, J const& j,
268 K const& k, L const& l, M const& m, N const& n, O const& o) const
270 return new T(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o);
279 template <typename T>
285 struct result { typedef T* type; };
287 template <typename A>
288 T* operator()(A const& a) const {
294 template <typename T>
301 struct result { typedef T* type; };
303 template <typename A, typename B>
304 T* operator()(A const& a, B const& b) const {
310 template <typename T>
318 struct result { typedef T* type; };
320 template <typename A, typename B, typename C>
321 T* operator()(A const& a, B const& b, C const& c) const {
322 return new T(a, b, c);
326 #if PHOENIX_CONSTRUCT_LIMIT > 3
327 template <typename T>
336 struct result { typedef T* type; };
340 typename A, typename B, typename C, typename D
343 A const& a, B const& b, C const& c, D const& d) const
345 return new T(a, b, c, d);
350 template <typename T>
360 struct result { typedef T* type; };
363 typename A, typename B, typename C, typename D, typename E
366 A const& a, B const& b, C const& c, D const& d, E const& e) const
368 return new T(a, b, c, d, e);
373 template <typename T>
384 struct result { typedef T* type; };
387 typename A, typename B, typename C, typename D, typename E,
391 A const& a, B const& b, C const& c, D const& d, E const& e,
394 return new T(a, b, c, d, e, f);
400 #if PHOENIX_CONSTRUCT_LIMIT > 6
401 template <typename T>
413 struct result { typedef T* type; };
416 typename A, typename B, typename C, typename D, typename E,
417 typename F, typename G
420 A const& a, B const& b, C const& c, D const& d, E const& e,
421 F const& f, G const& g) const
423 return new T(a, b, c, d, e, f, g);
427 template <typename T>
440 struct result { typedef T* type; };
443 typename A, typename B, typename C, typename D, typename E,
444 typename F, typename G, typename H
447 A const& a, B const& b, C const& c, D const& d, E const& e,
448 F const& f, G const& g, H const& h) const
450 return new T(a, b, c, d, e, f, g, h);
454 template <typename T>
468 struct result { typedef T* type; };
471 typename A, typename B, typename C, typename D, typename E,
472 typename F, typename G, typename H, typename I
475 A const& a, B const& b, C const& c, D const& d, E const& e,
476 F const& f, G const& g, H const& h, I const& i) const
478 return new T(a, b, c, d, e, f, g, h, i);
484 #if PHOENIX_CONSTRUCT_LIMIT > 9
485 template <typename T>
500 struct result { typedef T* type; };
504 typename A, typename B, typename C, typename D, typename E,
505 typename F, typename G, typename H, typename I, typename J
508 A const& a, B const& b, C const& c, D const& d, E const& e,
509 F const& f, G const& g, H const& h, I const& i, J const& j) const
511 return new T(a, b, c, d, e, f, g, h, i, j);
515 template <typename T>
531 struct result { typedef T* type; };
535 typename A, typename B, typename C, typename D, typename E,
536 typename F, typename G, typename H, typename I, typename J,
540 A const& a, B const& b, C const& c, D const& d, E const& e,
541 F const& f, G const& g, H const& h, I const& i, J const& j,
544 return new T(a, b, c, d, e, f, g, h, i, j, k);
549 template <typename T>
566 struct result { typedef T* type; };
570 typename A, typename B, typename C, typename D, typename E,
571 typename F, typename G, typename H, typename I, typename J,
572 typename K, typename L
575 A const& a, B const& b, C const& c, D const& d, E const& e,
576 F const& f, G const& g, H const& h, I const& i, J const& j,
577 K const& k, L const& l) const
579 return new T(a, b, c, d, f, e, g, h, i, j, k, l);
584 #if PHOENIX_CONSTRUCT_LIMIT > 12
585 template <typename T>
603 struct result { typedef T* type; };
607 typename A, typename B, typename C, typename D, typename E,
608 typename F, typename G, typename H, typename I, typename J,
609 typename K, typename L, typename M
612 A const& a, B const& b, C const& c, D const& d, E const& e,
613 F const& f, G const& g, H const& h, I const& i, J const& j,
614 K const& k, L const& l, M const& m) const
616 return new T(a, b, c, d, e, f, g, h, i, j, k, l, m);
620 template <typename T>
639 struct result { typedef T* type; };
643 typename A, typename B, typename C, typename D, typename E,
644 typename F, typename G, typename H, typename I, typename J,
645 typename K, typename L, typename M, typename N
648 A const& a, B const& b, C const& c, D const& d, E const& e,
649 F const& f, G const& g, H const& h, I const& i, J const& j,
650 K const& k, L const& l, M const& m, N const& n) const
652 return new T(a, b, c, d, e, f, g, h, i, j, k, l, m, n);
657 template <typename T>
677 struct result { typedef T* type; };
681 typename A, typename B, typename C, typename D, typename E,
682 typename F, typename G, typename H, typename I, typename J,
683 typename K, typename L, typename M, typename N, typename O
686 A const& a, B const& b, C const& c, D const& d, E const& e,
687 F const& f, G const& g, H const& h, I const& i, J const& j,
688 K const& k, L const& l, M const& m, N const& n, O const& o) const
690 return new T(a, b, c, d, f, e, g, h, i, j, k, l, m, n, o);
697 #if defined(__BORLANDC__) || (defined(__MWERKS__) && (__MWERKS__ <= 0x3002))
699 ///////////////////////////////////////////////////////////////////////////////
701 // The following specializations are needed because Borland and CodeWarrior
702 // does not accept default template arguments in nested template classes in
703 // classes (i.e new_l::result)
705 ///////////////////////////////////////////////////////////////////////////////
706 template <typename T, typename TupleT>
707 struct composite0_result<new_l_0<T>, TupleT> {
712 //////////////////////////////////
713 template <typename T, typename TupleT,
715 struct composite1_result<new_l<T>, TupleT, A> {
720 //////////////////////////////////
721 template <typename T, typename TupleT,
722 typename A, typename B>
723 struct composite2_result<new_l<T>, TupleT, A, B> {
728 //////////////////////////////////
729 template <typename T, typename TupleT,
730 typename A, typename B, typename C>
731 struct composite3_result<new_l<T>, TupleT, A, B, C> {
736 #if PHOENIX_LIMIT > 3
737 //////////////////////////////////
738 template <typename T, typename TupleT,
739 typename A, typename B, typename C, typename D>
740 struct composite4_result<new_l<T>, TupleT,
746 //////////////////////////////////
747 template <typename T, typename TupleT,
748 typename A, typename B, typename C, typename D, typename E>
749 struct composite5_result<new_l<T>, TupleT,
755 //////////////////////////////////
756 template <typename T, typename TupleT,
757 typename A, typename B, typename C, typename D, typename E,
759 struct composite6_result<new_l<T>, TupleT,
765 #if PHOENIX_LIMIT > 6
766 //////////////////////////////////
767 template <typename T, typename TupleT,
768 typename A, typename B, typename C, typename D, typename E,
769 typename F, typename G>
770 struct composite7_result<new_l<T>, TupleT,
771 A, B, C, D, E, F, G> {
776 //////////////////////////////////
777 template <typename T, typename TupleT,
778 typename A, typename B, typename C, typename D, typename E,
779 typename F, typename G, typename H>
780 struct composite8_result<new_l<T>, TupleT,
781 A, B, C, D, E, F, G, H> {
786 //////////////////////////////////
787 template <typename T, typename TupleT,
788 typename A, typename B, typename C, typename D, typename E,
789 typename F, typename G, typename H, typename I>
790 struct composite9_result<new_l<T>, TupleT,
791 A, B, C, D, E, F, G, H, I> {
796 #if PHOENIX_LIMIT > 9
797 //////////////////////////////////
798 template <typename T, typename TupleT,
799 typename A, typename B, typename C, typename D, typename E,
800 typename F, typename G, typename H, typename I, typename J>
801 struct composite10_result<new_l<T>, TupleT,
802 A, B, C, D, E, F, G, H, I, J> {
807 //////////////////////////////////
808 template <typename T, typename TupleT,
809 typename A, typename B, typename C, typename D, typename E,
810 typename F, typename G, typename H, typename I, typename J,
812 struct composite11_result<new_l<T>, TupleT,
813 A, B, C, D, E, F, G, H, I, J, K> {
818 //////////////////////////////////
819 template <typename T, typename TupleT,
820 typename A, typename B, typename C, typename D, typename E,
821 typename F, typename G, typename H, typename I, typename J,
822 typename K, typename L>
823 struct composite12_result<new_l<T>, TupleT,
824 A, B, C, D, E, F, G, H, I, J, K, L> {
829 #if PHOENIX_LIMIT > 12
830 //////////////////////////////////
831 template <typename T, typename TupleT,
832 typename A, typename B, typename C, typename D, typename E,
833 typename F, typename G, typename H, typename I, typename J,
834 typename K, typename L, typename M>
835 struct composite13_result<new_l<T>, TupleT,
836 A, B, C, D, E, F, G, H, I, J, K, L, M> {
841 //////////////////////////////////
842 template <typename T, typename TupleT,
843 typename A, typename B, typename C, typename D, typename E,
844 typename F, typename G, typename H, typename I, typename J,
845 typename K, typename L, typename M, typename N>
846 struct composite14_result<new_l<T>, TupleT,
847 A, B, C, D, E, F, G, H, I, J, K, L, M, N> {
852 //////////////////////////////////
853 template <typename T, typename TupleT,
854 typename A, typename B, typename C, typename D, typename E,
855 typename F, typename G, typename H, typename I, typename J,
856 typename K, typename L, typename M, typename N, typename O>
857 struct composite15_result<new_l<T>, TupleT,
858 A, B, C, D, E, F, G, H, I, J, K, L, M, N, O> {
869 //////////////////////////////////
870 template <typename T>
871 inline typename impl::make_composite<new_l_0<T> >::type
874 typedef impl::make_composite<new_l_0<T> > make_composite_t;
875 typedef typename make_composite_t::type type_t;
876 typedef typename make_composite_t::composite_type composite_type_t;
878 return type_t(composite_type_t(new_l_0<T>()));
881 //////////////////////////////////
882 template <typename T, typename A>
883 inline typename impl::make_composite<new_1<T>, A>::type
886 typedef impl::make_composite<new_1<T>, A> make_composite_t;
887 typedef typename make_composite_t::type type_t;
888 typedef typename make_composite_t::composite_type composite_type_t;
890 return type_t(composite_type_t(new_1<T>(),
891 as_actor<A>::convert(a)
895 //////////////////////////////////
896 template <typename T, typename A, typename B>
897 inline typename impl::make_composite<new_2<T>, A, B>::type
898 new_(A const& a, B const& b)
900 typedef impl::make_composite<new_2<T>, A, B> make_composite_t;
901 typedef typename make_composite_t::type type_t;
902 typedef typename make_composite_t::composite_type composite_type_t;
904 return type_t(composite_type_t(new_2<T>(),
905 as_actor<A>::convert(a),
906 as_actor<B>::convert(b)
910 //////////////////////////////////
911 template <typename T, typename A, typename B, typename C>
912 inline typename impl::make_composite<new_3<T>, A, B, C>::type
913 new_(A const& a, B const& b, C const& c)
915 typedef impl::make_composite<new_3<T>, A, B, C> make_composite_t;
916 typedef typename make_composite_t::type type_t;
917 typedef typename make_composite_t::composite_type composite_type_t;
919 return type_t(composite_type_t(new_3<T>(),
920 as_actor<A>::convert(a),
921 as_actor<B>::convert(b),
922 as_actor<C>::convert(c)
926 #if PHOENIX_CONSTRUCT_LIMIT > 3
927 //////////////////////////////////
929 typename T, typename A, typename B, typename C, typename D
931 inline typename impl::make_composite<new_4<T>, A, B, C, D>::type
933 A const& a, B const& b, C const& c, D const& d)
936 impl::make_composite<new_4<T>, A, B, C, D>
938 typedef typename make_composite_t::type type_t;
939 typedef typename make_composite_t::composite_type composite_type_t;
941 return type_t(composite_type_t(new_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)
949 //////////////////////////////////
951 typename T, typename A, typename B, typename C, typename D, typename E
953 inline typename impl::make_composite<new_5<T>, A, B, C, D, E>::type
955 A const& a, B const& b, C const& c, D const& d, E const& e)
958 impl::make_composite<new_5<T>, A, B, C, D, E>
960 typedef typename make_composite_t::type type_t;
961 typedef typename make_composite_t::composite_type composite_type_t;
963 return type_t(composite_type_t(new_5<T>(),
964 as_actor<A>::convert(a),
965 as_actor<B>::convert(b),
966 as_actor<C>::convert(c),
967 as_actor<D>::convert(d),
968 as_actor<E>::convert(e)
972 //////////////////////////////////
974 typename T, typename A, typename B, typename C, typename D, typename E,
977 inline typename impl::make_composite<new_6<T>, A, B, C, D, E, F>::type
979 A const& a, B const& b, C const& c, D const& d, E const& e,
983 impl::make_composite<new_6<T>, A, B, C, D, E, F>
985 typedef typename make_composite_t::type type_t;
986 typedef typename make_composite_t::composite_type composite_type_t;
988 return type_t(composite_type_t(new_6<T>(),
989 as_actor<A>::convert(a),
990 as_actor<B>::convert(b),
991 as_actor<C>::convert(c),
992 as_actor<D>::convert(d),
993 as_actor<E>::convert(e),
994 as_actor<F>::convert(f)
998 #if PHOENIX_CONSTRUCT_LIMIT > 6
999 //////////////////////////////////
1001 typename T, typename A, typename B, typename C, typename D, typename E,
1002 typename F, typename G
1004 inline typename impl::make_composite<new_7<T>, A, B, C, D, E, F, G>::type
1006 A const& a, B const& b, C const& c, D const& d, E const& e,
1007 F const& f, G const& g)
1010 impl::make_composite<new_7<T>, A, B, C, D, E, F, G>
1012 typedef typename make_composite_t::type type_t;
1013 typedef typename make_composite_t::composite_type composite_type_t;
1015 return type_t(composite_type_t(new_7<T>(),
1016 as_actor<A>::convert(a),
1017 as_actor<B>::convert(b),
1018 as_actor<C>::convert(c),
1019 as_actor<D>::convert(d),
1020 as_actor<E>::convert(e),
1021 as_actor<F>::convert(f),
1022 as_actor<G>::convert(g)
1026 //////////////////////////////////
1028 typename T, typename A, typename B, typename C, typename D, typename E,
1029 typename F, typename G, typename H
1031 inline typename impl::make_composite<new_8<T>, A, B, C, D, E, F, G, H>::type
1033 A const& a, B const& b, C const& c, D const& d, E const& e,
1034 F const& f, G const& g, H const& h)
1037 impl::make_composite<new_8<T>, A, B, C, D, E, F, G, H>
1039 typedef typename make_composite_t::type type_t;
1040 typedef typename make_composite_t::composite_type composite_type_t;
1042 return type_t(composite_type_t(new_8<T>(),
1043 as_actor<A>::convert(a),
1044 as_actor<B>::convert(b),
1045 as_actor<C>::convert(c),
1046 as_actor<D>::convert(d),
1047 as_actor<E>::convert(e),
1048 as_actor<F>::convert(f),
1049 as_actor<G>::convert(g),
1050 as_actor<H>::convert(h)
1054 //////////////////////////////////
1056 typename T, typename A, typename B, typename C, typename D, typename E,
1057 typename F, typename G, typename H, typename I
1059 inline typename impl::make_composite<new_9<T>, A, B, C, D, E, F, G, H, I>::type
1061 A const& a, B const& b, C const& c, D const& d, E const& e,
1062 F const& f, G const& g, H const& h, I const& i)
1065 impl::make_composite<new_9<T>, A, B, C, D, E, F, G, H, I>
1067 typedef typename make_composite_t::type type_t;
1068 typedef typename make_composite_t::composite_type composite_type_t;
1070 return type_t(composite_type_t(new_9<T>(),
1071 as_actor<A>::convert(a),
1072 as_actor<B>::convert(b),
1073 as_actor<C>::convert(c),
1074 as_actor<D>::convert(d),
1075 as_actor<E>::convert(e),
1076 as_actor<F>::convert(f),
1077 as_actor<G>::convert(g),
1078 as_actor<H>::convert(h),
1079 as_actor<I>::convert(i)
1083 #if PHOENIX_CONSTRUCT_LIMIT > 9
1084 //////////////////////////////////
1086 typename T, typename A, typename B, typename C, typename D, typename E,
1087 typename F, typename G, typename H, typename I, typename J
1089 inline typename impl::make_composite<
1090 new_10<T>, A, B, C, D, E, F, G, H, I, J>::type
1092 A const& a, B const& b, C const& c, D const& d, E const& e,
1093 F const& f, G const& g, H const& h, I const& i, J const& j)
1096 impl::make_composite<
1097 new_10<T>, A, B, C, D, E, F, G, H, I, J
1100 typedef typename make_composite_t::type type_t;
1101 typedef typename make_composite_t::composite_type composite_type_t;
1103 return type_t(composite_type_t(new_10<T>(),
1104 as_actor<A>::convert(a),
1105 as_actor<B>::convert(b),
1106 as_actor<C>::convert(c),
1107 as_actor<D>::convert(d),
1108 as_actor<E>::convert(e),
1109 as_actor<F>::convert(f),
1110 as_actor<G>::convert(g),
1111 as_actor<H>::convert(h),
1112 as_actor<I>::convert(i),
1113 as_actor<J>::convert(j)
1117 //////////////////////////////////
1119 typename T, typename A, typename B, typename C, typename D, typename E,
1120 typename F, typename G, typename H, typename I, typename J, typename K
1122 inline typename impl::make_composite<
1123 new_11<T>, A, B, C, D, E, F, G, H, I, J, K>::type
1125 A const& a, B const& b, C const& c, D const& d, E const& e,
1126 F const& f, G const& g, H const& h, I const& i, J const& j,
1130 impl::make_composite<
1131 new_11<T>, A, B, C, D, E, F, G, H, I, J, K
1134 typedef typename make_composite_t::type type_t;
1135 typedef typename make_composite_t::composite_type composite_type_t;
1137 return type_t(composite_type_t(new_11<T>(),
1138 as_actor<A>::convert(a),
1139 as_actor<B>::convert(b),
1140 as_actor<C>::convert(c),
1141 as_actor<D>::convert(d),
1142 as_actor<E>::convert(e),
1143 as_actor<F>::convert(f),
1144 as_actor<G>::convert(g),
1145 as_actor<H>::convert(h),
1146 as_actor<I>::convert(i),
1147 as_actor<J>::convert(j),
1148 as_actor<K>::convert(k)
1152 //////////////////////////////////
1154 typename T, typename A, typename B, typename C, typename D, typename E,
1155 typename F, typename G, typename H, typename I, typename J, typename K,
1158 inline typename impl::make_composite<
1159 new_12<T>, A, B, C, D, E, F, G, H, I, J, K, L>::type
1161 A const& a, B const& b, C const& c, D const& d, E const& e,
1162 F const& f, G const& g, H const& h, I const& i, J const& j,
1163 K const& k, L const& l)
1166 impl::make_composite<
1167 new_12<T>, A, B, C, D, E, F, G, H, I, J, K, L
1170 typedef typename make_composite_t::type type_t;
1171 typedef typename make_composite_t::composite_type composite_type_t;
1173 return type_t(composite_type_t(new_12<T>(),
1174 as_actor<A>::convert(a),
1175 as_actor<B>::convert(b),
1176 as_actor<C>::convert(c),
1177 as_actor<D>::convert(d),
1178 as_actor<E>::convert(e),
1179 as_actor<F>::convert(f),
1180 as_actor<G>::convert(g),
1181 as_actor<H>::convert(h),
1182 as_actor<I>::convert(i),
1183 as_actor<J>::convert(j),
1184 as_actor<K>::convert(k),
1185 as_actor<L>::convert(l)
1189 #if PHOENIX_CONSTRUCT_LIMIT > 12
1190 //////////////////////////////////
1192 typename T, typename A, typename B, typename C, typename D, typename E,
1193 typename F, typename G, typename H, typename I, typename J, typename K,
1194 typename L, typename M
1196 inline typename impl::make_composite<
1197 new_13<T>, A, B, C, D, E, F, G, H, I, J, K, L, M>::type
1199 A const& a, B const& b, C const& c, D const& d, E const& e,
1200 F const& f, G const& g, H const& h, I const& i, J const& j,
1201 K const& k, L const& l, M const& m)
1204 impl::make_composite<
1205 new_13<T>, A, B, C, D, E, F, G, H, I, J, K, L, M
1208 typedef typename make_composite_t::type type_t;
1209 typedef typename make_composite_t::composite_type composite_type_t;
1211 return type_t(composite_type_t(new_13<T>(),
1212 as_actor<A>::convert(a),
1213 as_actor<B>::convert(b),
1214 as_actor<C>::convert(c),
1215 as_actor<D>::convert(d),
1216 as_actor<E>::convert(e),
1217 as_actor<F>::convert(f),
1218 as_actor<G>::convert(g),
1219 as_actor<H>::convert(h),
1220 as_actor<I>::convert(i),
1221 as_actor<J>::convert(j),
1222 as_actor<K>::convert(k),
1223 as_actor<L>::convert(l),
1224 as_actor<M>::convert(m)
1228 //////////////////////////////////
1230 typename T, typename A, typename B, typename C, typename D, typename E,
1231 typename F, typename G, typename H, typename I, typename J, typename K,
1232 typename L, typename M, typename N
1234 inline typename impl::make_composite<
1235 new_14<T>, A, B, C, D, E, F, G, H, I, J, K, L, M>::type
1237 A const& a, B const& b, C const& c, D const& d, E const& e,
1238 F const& f, G const& g, H const& h, I const& i, J const& j,
1239 K const& k, L const& l, M const& m, N const& n)
1242 impl::make_composite<
1243 new_14<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, N
1246 typedef typename make_composite_t::type type_t;
1247 typedef typename make_composite_t::composite_type composite_type_t;
1249 return type_t(composite_type_t(new_14<T>(),
1250 as_actor<A>::convert(a),
1251 as_actor<B>::convert(b),
1252 as_actor<C>::convert(c),
1253 as_actor<D>::convert(d),
1254 as_actor<E>::convert(e),
1255 as_actor<F>::convert(f),
1256 as_actor<G>::convert(g),
1257 as_actor<H>::convert(h),
1258 as_actor<I>::convert(i),
1259 as_actor<J>::convert(j),
1260 as_actor<K>::convert(k),
1261 as_actor<L>::convert(l),
1262 as_actor<M>::convert(m),
1263 as_actor<N>::convert(n)
1267 //////////////////////////////////
1269 typename T, typename A, typename B, typename C, typename D, typename E,
1270 typename F, typename G, typename H, typename I, typename J, typename K,
1271 typename L, typename M, typename N, typename O
1273 inline typename impl::make_composite<
1274 new_15<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, O>::type
1276 A const& a, B const& b, C const& c, D const& d, E const& e,
1277 F const& f, G const& g, H const& h, I const& i, J const& j,
1278 K const& k, L const& l, M const& m, N const& n, O const& o)
1281 impl::make_composite<
1282 new_15<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O
1285 typedef typename make_composite_t::type type_t;
1286 typedef typename make_composite_t::composite_type composite_type_t;
1288 return type_t(composite_type_t(new_15<T>(),
1289 as_actor<A>::convert(a),
1290 as_actor<B>::convert(b),
1291 as_actor<C>::convert(c),
1292 as_actor<D>::convert(d),
1293 as_actor<E>::convert(e),
1294 as_actor<F>::convert(f),
1295 as_actor<G>::convert(g),
1296 as_actor<H>::convert(h),
1297 as_actor<I>::convert(i),
1298 as_actor<J>::convert(j),
1299 as_actor<K>::convert(k),
1300 as_actor<L>::convert(l),
1301 as_actor<M>::convert(m),
1302 as_actor<N>::convert(n),
1303 as_actor<O>::convert(o)
1312 ///////////////////////////////////////////////////////////////////////////////
1313 } // namespace phoenix
1315 #endif // PHOENIX_NEW_HPP