1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/ossrv/ossrv_pub/boost_apis/boost/spirit/phoenix/casts.hpp Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,1471 @@
1.4 +/*=============================================================================
1.5 + Phoenix V1.2.1
1.6 + Copyright (c) 2001-2003 Joel de Guzman
1.7 + Copyright (c) 2001-2003 Hartmut Kaiser
1.8 +
1.9 + Use, modification and distribution is subject to the Boost Software
1.10 + License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
1.11 + http://www.boost.org/LICENSE_1_0.txt)
1.12 +==============================================================================*/
1.13 +
1.14 +#ifndef PHOENIX_CASTS_HPP
1.15 +#define PHOENIX_CASTS_HPP
1.16 +
1.17 +///////////////////////////////////////////////////////////////////////////////
1.18 +#include <boost/spirit/phoenix/actor.hpp>
1.19 +#include <boost/spirit/phoenix/composite.hpp>
1.20 +#include <boost/static_assert.hpp>
1.21 +
1.22 +///////////////////////////////////////////////////////////////////////////////
1.23 +namespace phoenix {
1.24 +
1.25 +///////////////////////////////////////////////////////////////////////////////
1.26 +//
1.27 +// Phoenix predefined maximum construct_ limit. This limit defines the maximum
1.28 +// number of parameters supported for calles to the set of construct_ template
1.29 +// functions (lazy object construction, see below). This number defaults to 3.
1.30 +// The actual maximum is rounded up in multiples of 3. Thus, if this value
1.31 +// is 4, the actual limit is 6. The ultimate maximum limit in this
1.32 +// implementation is 15.
1.33 +// PHOENIX_CONSTRUCT_LIMIT should NOT be greater than PHOENIX_LIMIT!
1.34 +
1.35 +#if !defined(PHOENIX_CONSTRUCT_LIMIT)
1.36 +#define PHOENIX_CONSTRUCT_LIMIT PHOENIX_LIMIT
1.37 +#endif
1.38 +
1.39 +// ensure PHOENIX_CONSTRUCT_LIMIT <= PHOENIX_LIMIT
1.40 +BOOST_STATIC_ASSERT(PHOENIX_CONSTRUCT_LIMIT <= PHOENIX_LIMIT);
1.41 +
1.42 +// ensure PHOENIX_CONSTRUCT_LIMIT <= 15
1.43 +BOOST_STATIC_ASSERT(PHOENIX_CONSTRUCT_LIMIT <= 15);
1.44 +
1.45 +///////////////////////////////////////////////////////////////////////////////
1.46 +//
1.47 +// Lazy C++ casts
1.48 +//
1.49 +// The set of lazy C++ cast template classes and functions provide a way
1.50 +// of lazily casting certain type to another during parsing.
1.51 +// The lazy C++ templates are (syntactically) used very much like
1.52 +// the well known C++ casts:
1.53 +//
1.54 +// A *a = static_cast_<A *>(...actor returning a convertible type...);
1.55 +//
1.56 +// where the given parameter should be an actor, which eval() function
1.57 +// returns a convertible type.
1.58 +//
1.59 +///////////////////////////////////////////////////////////////////////////////
1.60 +template <typename T, typename A>
1.61 +struct static_cast_l {
1.62 +
1.63 + template <typename TupleT>
1.64 + struct result { typedef T type; };
1.65 +
1.66 + static_cast_l(A const& a_)
1.67 + : a(a_) {}
1.68 +
1.69 + template <typename TupleT>
1.70 + T
1.71 + eval(TupleT const& args) const
1.72 + {
1.73 + return static_cast<T>(a.eval(args));
1.74 + }
1.75 +
1.76 + A a;
1.77 +};
1.78 +
1.79 +//////////////////////////////////
1.80 +template <typename T, typename BaseAT>
1.81 +inline actor<static_cast_l<T, BaseAT> >
1.82 +static_cast_(actor<BaseAT> const& a)
1.83 +{
1.84 + typedef static_cast_l<T, BaseAT> cast_t;
1.85 + return actor<cast_t>(cast_t(a));
1.86 +}
1.87 +
1.88 +//////////////////////////////////
1.89 +template <typename T, typename A>
1.90 +struct dynamic_cast_l {
1.91 +
1.92 + template <typename TupleT>
1.93 + struct result { typedef T type; };
1.94 +
1.95 + dynamic_cast_l(A const& a_)
1.96 + : a(a_) {}
1.97 +
1.98 + template <typename TupleT>
1.99 + T
1.100 + eval(TupleT const& args) const
1.101 + {
1.102 + return dynamic_cast<T>(a.eval(args));
1.103 + }
1.104 +
1.105 + A a;
1.106 +};
1.107 +
1.108 +//////////////////////////////////
1.109 +template <typename T, typename BaseAT>
1.110 +inline actor<dynamic_cast_l<T, BaseAT> >
1.111 +dynamic_cast_(actor<BaseAT> const& a)
1.112 +{
1.113 + typedef dynamic_cast_l<T, BaseAT> cast_t;
1.114 + return actor<cast_t>(cast_t(a));
1.115 +}
1.116 +
1.117 +//////////////////////////////////
1.118 +template <typename T, typename A>
1.119 +struct reinterpret_cast_l {
1.120 +
1.121 + template <typename TupleT>
1.122 + struct result { typedef T type; };
1.123 +
1.124 + reinterpret_cast_l(A const& a_)
1.125 + : a(a_) {}
1.126 +
1.127 + template <typename TupleT>
1.128 + T
1.129 + eval(TupleT const& args) const
1.130 + {
1.131 + return reinterpret_cast<T>(a.eval(args));
1.132 + }
1.133 +
1.134 + A a;
1.135 +};
1.136 +
1.137 +//////////////////////////////////
1.138 +template <typename T, typename BaseAT>
1.139 +inline actor<reinterpret_cast_l<T, BaseAT> >
1.140 +reinterpret_cast_(actor<BaseAT> const& a)
1.141 +{
1.142 + typedef reinterpret_cast_l<T, BaseAT> cast_t;
1.143 + return actor<cast_t>(cast_t(a));
1.144 +}
1.145 +
1.146 +//////////////////////////////////
1.147 +template <typename T, typename A>
1.148 +struct const_cast_l {
1.149 +
1.150 + template <typename TupleT>
1.151 + struct result { typedef T type; };
1.152 +
1.153 + const_cast_l(A const& a_)
1.154 + : a(a_) {}
1.155 +
1.156 + template <typename TupleT>
1.157 + T
1.158 + eval(TupleT const& args) const
1.159 + {
1.160 + return const_cast<T>(a.eval(args));
1.161 + }
1.162 +
1.163 + A a;
1.164 +};
1.165 +
1.166 +//////////////////////////////////
1.167 +template <typename T, typename BaseAT>
1.168 +inline actor<const_cast_l<T, BaseAT> >
1.169 +const_cast_(actor<BaseAT> const& a)
1.170 +{
1.171 + typedef const_cast_l<T, BaseAT> cast_t;
1.172 + return actor<cast_t>(cast_t(a));
1.173 +}
1.174 +
1.175 +///////////////////////////////////////////////////////////////////////////////
1.176 +//
1.177 +// construct_
1.178 +//
1.179 +// Lazy object construction
1.180 +//
1.181 +// The set of construct_<> template classes and functions provide a way
1.182 +// of lazily constructing certain object from a arbitrary set of
1.183 +// actors during parsing.
1.184 +// The construct_ templates are (syntactically) used very much like
1.185 +// the well known C++ casts:
1.186 +//
1.187 +// A a = construct_<A>(...arbitrary list of actors...);
1.188 +//
1.189 +// where the given parameters are submitted as parameters to the
1.190 +// contructor of the object of type A. (This certainly implies, that
1.191 +// type A has a constructor with a fitting set of parameter types
1.192 +// defined.)
1.193 +//
1.194 +// The maximum number of needed parameters is controlled through the
1.195 +// preprocessor constant PHOENIX_CONSTRUCT_LIMIT. Note though, that this
1.196 +// limit should not be greater than PHOENIX_LIMIT.
1.197 +//
1.198 +///////////////////////////////////////////////////////////////////////////////
1.199 +template <typename T>
1.200 +struct construct_l_0 {
1.201 + typedef T result_type;
1.202 +
1.203 + T operator()() const {
1.204 + return T();
1.205 + }
1.206 +};
1.207 +
1.208 +
1.209 +template <typename T>
1.210 +struct construct_l {
1.211 +
1.212 + template <
1.213 + typename A
1.214 + , typename B
1.215 + , typename C
1.216 +
1.217 +#if PHOENIX_CONSTRUCT_LIMIT > 3
1.218 + , typename D
1.219 + , typename E
1.220 + , typename F
1.221 +
1.222 +#if PHOENIX_CONSTRUCT_LIMIT > 6
1.223 + , typename G
1.224 + , typename H
1.225 + , typename I
1.226 +
1.227 +#if PHOENIX_CONSTRUCT_LIMIT > 9
1.228 + , typename J
1.229 + , typename K
1.230 + , typename L
1.231 +
1.232 +#if PHOENIX_CONSTRUCT_LIMIT > 12
1.233 + , typename M
1.234 + , typename N
1.235 + , typename O
1.236 +#endif
1.237 +#endif
1.238 +#endif
1.239 +#endif
1.240 + >
1.241 + struct result { typedef T type; };
1.242 +
1.243 + T operator()() const
1.244 + {
1.245 + return T();
1.246 + }
1.247 +
1.248 + template <typename A>
1.249 + T operator()(A const& a) const
1.250 + {
1.251 + T t(a);
1.252 + return t;
1.253 + }
1.254 +
1.255 + template <typename A, typename B>
1.256 + T operator()(A const& a, B const& b) const
1.257 + {
1.258 + T t(a, b);
1.259 + return t;
1.260 + }
1.261 +
1.262 + template <typename A, typename B, typename C>
1.263 + T operator()(A const& a, B const& b, C const& c) const
1.264 + {
1.265 + T t(a, b, c);
1.266 + return t;
1.267 + }
1.268 +
1.269 +#if PHOENIX_CONSTRUCT_LIMIT > 3
1.270 + template <
1.271 + typename A, typename B, typename C, typename D
1.272 + >
1.273 + T operator()(
1.274 + A const& a, B const& b, C const& c, D const& d) const
1.275 + {
1.276 + T t(a, b, c, d);
1.277 + return t;
1.278 + }
1.279 +
1.280 + template <
1.281 + typename A, typename B, typename C, typename D, typename E
1.282 + >
1.283 + T operator()(
1.284 + A const& a, B const& b, C const& c, D const& d, E const& e) const
1.285 + {
1.286 + T t(a, b, c, d, e);
1.287 + return t;
1.288 + }
1.289 +
1.290 + template <
1.291 + typename A, typename B, typename C, typename D, typename E,
1.292 + typename F
1.293 + >
1.294 + T operator()(
1.295 + A const& a, B const& b, C const& c, D const& d, E const& e,
1.296 + F const& f) const
1.297 + {
1.298 + T t(a, b, c, d, e, f);
1.299 + return t;
1.300 + }
1.301 +
1.302 +#if PHOENIX_CONSTRUCT_LIMIT > 6
1.303 + template <
1.304 + typename A, typename B, typename C, typename D, typename E,
1.305 + typename F, typename G
1.306 + >
1.307 + T operator()(
1.308 + A const& a, B const& b, C const& c, D const& d, E const& e,
1.309 + F const& f, G const& g) const
1.310 + {
1.311 + T t(a, b, c, d, e, f, g);
1.312 + return t;
1.313 + }
1.314 +
1.315 + template <
1.316 + typename A, typename B, typename C, typename D, typename E,
1.317 + typename F, typename G, typename H
1.318 + >
1.319 + T operator()(
1.320 + A const& a, B const& b, C const& c, D const& d, E const& e,
1.321 + F const& f, G const& g, H const& h) const
1.322 + {
1.323 + T t(a, b, c, d, e, f, g, h);
1.324 + return t;
1.325 + }
1.326 +
1.327 + template <
1.328 + typename A, typename B, typename C, typename D, typename E,
1.329 + typename F, typename G, typename H, typename I
1.330 + >
1.331 + T operator()(
1.332 + A const& a, B const& b, C const& c, D const& d, E const& e,
1.333 + F const& f, G const& g, H const& h, I const& i) const
1.334 + {
1.335 + T t(a, b, c, d, e, f, g, h, i);
1.336 + return t;
1.337 + }
1.338 +
1.339 +#if PHOENIX_CONSTRUCT_LIMIT > 9
1.340 + template <
1.341 + typename A, typename B, typename C, typename D, typename E,
1.342 + typename F, typename G, typename H, typename I, typename J
1.343 + >
1.344 + T operator()(
1.345 + A const& a, B const& b, C const& c, D const& d, E const& e,
1.346 + F const& f, G const& g, H const& h, I const& i, J const& j) const
1.347 + {
1.348 + T t(a, b, c, d, e, f, g, h, i, j);
1.349 + return t;
1.350 + }
1.351 +
1.352 + template <
1.353 + typename A, typename B, typename C, typename D, typename E,
1.354 + typename F, typename G, typename H, typename I, typename J,
1.355 + typename K
1.356 + >
1.357 + T operator()(
1.358 + A const& a, B const& b, C const& c, D const& d, E const& e,
1.359 + F const& f, G const& g, H const& h, I const& i, J const& j,
1.360 + K const& k) const
1.361 + {
1.362 + T t(a, b, c, d, e, f, g, h, i, j, k);
1.363 + return t;
1.364 + }
1.365 +
1.366 + template <
1.367 + typename A, typename B, typename C, typename D, typename E,
1.368 + typename F, typename G, typename H, typename I, typename J,
1.369 + typename K, typename L
1.370 + >
1.371 + T operator()(
1.372 + A const& a, B const& b, C const& c, D const& d, E const& e,
1.373 + F const& f, G const& g, H const& h, I const& i, J const& j,
1.374 + K const& k, L const& l) const
1.375 + {
1.376 + T t(a, b, c, d, e, f, g, h, i, j, k, l);
1.377 + return t;
1.378 + }
1.379 +
1.380 +#if PHOENIX_CONSTRUCT_LIMIT > 12
1.381 + template <
1.382 + typename A, typename B, typename C, typename D, typename E,
1.383 + typename F, typename G, typename H, typename I, typename J,
1.384 + typename K, typename L, typename M
1.385 + >
1.386 + T operator()(
1.387 + A const& a, B const& b, C const& c, D const& d, E const& e,
1.388 + F const& f, G const& g, H const& h, I const& i, J const& j,
1.389 + K const& k, L const& l, M const& m) const
1.390 + {
1.391 + T t(a, b, c, d, e, f, g, h, i, j, k, l, m);
1.392 + return t;
1.393 + }
1.394 +
1.395 + template <
1.396 + typename A, typename B, typename C, typename D, typename E,
1.397 + typename F, typename G, typename H, typename I, typename J,
1.398 + typename K, typename L, typename M, typename N
1.399 + >
1.400 + T operator()(
1.401 + A const& a, B const& b, C const& c, D const& d, E const& e,
1.402 + F const& f, G const& g, H const& h, I const& i, J const& j,
1.403 + K const& k, L const& l, M const& m, N const& n) const
1.404 + {
1.405 + T t(a, b, c, d, e, f, g, h, i, j, k, l, m, n);
1.406 + return t;
1.407 + }
1.408 +
1.409 + template <
1.410 + typename A, typename B, typename C, typename D, typename E,
1.411 + typename F, typename G, typename H, typename I, typename J,
1.412 + typename K, typename L, typename M, typename N, typename O
1.413 + >
1.414 + T operator()(
1.415 + A const& a, B const& b, C const& c, D const& d, E const& e,
1.416 + F const& f, G const& g, H const& h, I const& i, J const& j,
1.417 + K const& k, L const& l, M const& m, N const& n, O const& o) const
1.418 + {
1.419 + T t(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o);
1.420 + return t;
1.421 + }
1.422 +
1.423 +#endif
1.424 +#endif
1.425 +#endif
1.426 +#endif
1.427 +};
1.428 +
1.429 +
1.430 +template <typename T>
1.431 +struct construct_1 {
1.432 +
1.433 + template <
1.434 + typename A
1.435 + >
1.436 + struct result { typedef T type; };
1.437 +
1.438 + template <typename A>
1.439 + T operator()(A const& a) const
1.440 + {
1.441 + T t(a);
1.442 + return t;
1.443 + }
1.444 +
1.445 +};
1.446 +
1.447 +template <typename T>
1.448 +struct construct_2 {
1.449 +
1.450 + template <
1.451 + typename A
1.452 + , typename B
1.453 + >
1.454 + struct result { typedef T type; };
1.455 +
1.456 + template <typename A, typename B>
1.457 + T operator()(A const& a, B const& b) const
1.458 + {
1.459 + T t(a, b);
1.460 + return t;
1.461 + }
1.462 +
1.463 +};
1.464 +
1.465 +template <typename T>
1.466 +struct construct_3 {
1.467 +
1.468 + template <
1.469 + typename A
1.470 + , typename B
1.471 + , typename C
1.472 + >
1.473 + struct result { typedef T type; };
1.474 +
1.475 + template <typename A, typename B, typename C>
1.476 + T operator()(A const& a, B const& b, C const& c) const
1.477 + {
1.478 + T t(a, b, c);
1.479 + return t;
1.480 + }
1.481 +};
1.482 +
1.483 +#if PHOENIX_CONSTRUCT_LIMIT > 3
1.484 +template <typename T>
1.485 +struct construct_4 {
1.486 +
1.487 + template <
1.488 + typename A
1.489 + , typename B
1.490 + , typename C
1.491 + , typename D
1.492 + >
1.493 + struct result { typedef T type; };
1.494 +
1.495 + template <
1.496 + typename A, typename B, typename C, typename D
1.497 + >
1.498 + T operator()(
1.499 + A const& a, B const& b, C const& c, D const& d) const
1.500 + {
1.501 + T t(a, b, c, d);
1.502 + return t;
1.503 + }
1.504 +};
1.505 +
1.506 +
1.507 +template <typename T>
1.508 +struct construct_5 {
1.509 +
1.510 + template <
1.511 + typename A
1.512 + , typename B
1.513 + , typename C
1.514 + , typename D
1.515 + , typename E
1.516 + >
1.517 + struct result { typedef T type; };
1.518 +
1.519 + template <
1.520 + typename A, typename B, typename C, typename D, typename E
1.521 + >
1.522 + T operator()(
1.523 + A const& a, B const& b, C const& c, D const& d, E const& e) const
1.524 + {
1.525 + T t(a, b, c, d, e);
1.526 + return t;
1.527 + }
1.528 +};
1.529 +
1.530 +
1.531 +template <typename T>
1.532 +struct construct_6 {
1.533 +
1.534 + template <
1.535 + typename A
1.536 + , typename B
1.537 + , typename C
1.538 + , typename D
1.539 + , typename E
1.540 + , typename F
1.541 + >
1.542 + struct result { typedef T type; };
1.543 +
1.544 + template <
1.545 + typename A, typename B, typename C, typename D, typename E,
1.546 + typename F
1.547 + >
1.548 + T operator()(
1.549 + A const& a, B const& b, C const& c, D const& d, E const& e,
1.550 + F const& f) const
1.551 + {
1.552 + T t(a, b, c, d, e, f);
1.553 + return t;
1.554 + }
1.555 +};
1.556 +#endif
1.557 +
1.558 +
1.559 +#if PHOENIX_CONSTRUCT_LIMIT > 6
1.560 +template <typename T>
1.561 +struct construct_7 {
1.562 +
1.563 + template <
1.564 + typename A
1.565 + , typename B
1.566 + , typename C
1.567 + , typename D
1.568 + , typename E
1.569 + , typename F
1.570 + , typename G
1.571 + >
1.572 + struct result { typedef T type; };
1.573 +
1.574 + template <
1.575 + typename A, typename B, typename C, typename D, typename E,
1.576 + typename F, typename G
1.577 + >
1.578 + T operator()(
1.579 + A const& a, B const& b, C const& c, D const& d, E const& e,
1.580 + F const& f, G const& g) const
1.581 + {
1.582 + T t(a, b, c, d, e, f, g);
1.583 + return t;
1.584 + }
1.585 +};
1.586 +
1.587 +template <typename T>
1.588 +struct construct_8 {
1.589 +
1.590 + template <
1.591 + typename A
1.592 + , typename B
1.593 + , typename C
1.594 + , typename D
1.595 + , typename E
1.596 + , typename F
1.597 + , typename G
1.598 + , typename H
1.599 + >
1.600 + struct result { typedef T type; };
1.601 +
1.602 + template <
1.603 + typename A, typename B, typename C, typename D, typename E,
1.604 + typename F, typename G, typename H
1.605 + >
1.606 + T operator()(
1.607 + A const& a, B const& b, C const& c, D const& d, E const& e,
1.608 + F const& f, G const& g, H const& h) const
1.609 + {
1.610 + T t(a, b, c, d, e, f, g, h);
1.611 + return t;
1.612 + }
1.613 +};
1.614 +
1.615 +template <typename T>
1.616 +struct construct_9 {
1.617 +
1.618 + template <
1.619 + typename A
1.620 + , typename B
1.621 + , typename C
1.622 + , typename D
1.623 + , typename E
1.624 + , typename F
1.625 + , typename G
1.626 + , typename H
1.627 + , typename I
1.628 + >
1.629 + struct result { typedef T type; };
1.630 +
1.631 + template <
1.632 + typename A, typename B, typename C, typename D, typename E,
1.633 + typename F, typename G, typename H, typename I
1.634 + >
1.635 + T operator()(
1.636 + A const& a, B const& b, C const& c, D const& d, E const& e,
1.637 + F const& f, G const& g, H const& h, I const& i) const
1.638 + {
1.639 + T t(a, b, c, d, e, f, g, h, i);
1.640 + return t;
1.641 + }
1.642 +};
1.643 +#endif
1.644 +
1.645 +
1.646 +#if PHOENIX_CONSTRUCT_LIMIT > 9
1.647 +template <typename T>
1.648 +struct construct_10 {
1.649 +
1.650 + template <
1.651 + typename A
1.652 + , typename B
1.653 + , typename C
1.654 + , typename D
1.655 + , typename E
1.656 + , typename F
1.657 + , typename G
1.658 + , typename H
1.659 + , typename I
1.660 + , typename J
1.661 + >
1.662 + struct result { typedef T type; };
1.663 +
1.664 + template <
1.665 + typename A, typename B, typename C, typename D, typename E,
1.666 + typename F, typename G, typename H, typename I, typename J
1.667 + >
1.668 + T operator()(
1.669 + A const& a, B const& b, C const& c, D const& d, E const& e,
1.670 + F const& f, G const& g, H const& h, I const& i, J const& j) const
1.671 + {
1.672 + T t(a, b, c, d, e, f, g, h, i, j);
1.673 + return t;
1.674 + }
1.675 +};
1.676 +
1.677 +template <typename T>
1.678 +struct construct_11 {
1.679 +
1.680 + template <
1.681 + typename A
1.682 + , typename B
1.683 + , typename C
1.684 + , typename D
1.685 + , typename E
1.686 + , typename F
1.687 + , typename G
1.688 + , typename H
1.689 + , typename I
1.690 + , typename J
1.691 + , typename K
1.692 + >
1.693 + struct result { typedef T type; };
1.694 +
1.695 + template <
1.696 + typename A, typename B, typename C, typename D, typename E,
1.697 + typename F, typename G, typename H, typename I, typename J,
1.698 + typename K
1.699 + >
1.700 + T operator()(
1.701 + A const& a, B const& b, C const& c, D const& d, E const& e,
1.702 + F const& f, G const& g, H const& h, I const& i, J const& j,
1.703 + K const& k) const
1.704 + {
1.705 + T t(a, b, c, d, e, f, g, h, i, j, k);
1.706 + return t;
1.707 + }
1.708 +};
1.709 +
1.710 +template <typename T>
1.711 +struct construct_12 {
1.712 +
1.713 + template <
1.714 + typename A
1.715 + , typename B
1.716 + , typename C
1.717 + , typename D
1.718 + , typename E
1.719 + , typename F
1.720 + , typename G
1.721 + , typename H
1.722 + , typename I
1.723 + , typename J
1.724 + , typename K
1.725 + , typename L
1.726 + >
1.727 + struct result { typedef T type; };
1.728 +
1.729 + template <
1.730 + typename A, typename B, typename C, typename D, typename E,
1.731 + typename F, typename G, typename H, typename I, typename J,
1.732 + typename K, typename L
1.733 + >
1.734 + T operator()(
1.735 + A const& a, B const& b, C const& c, D const& d, E const& e,
1.736 + F const& f, G const& g, H const& h, I const& i, J const& j,
1.737 + K const& k, L const& l) const
1.738 + {
1.739 + T t(a, b, c, d, f, e, g, h, i, j, k, l);
1.740 + return t;
1.741 + }
1.742 +};
1.743 +#endif
1.744 +
1.745 +#if PHOENIX_CONSTRUCT_LIMIT > 12
1.746 +template <typename T>
1.747 +struct construct_13 {
1.748 +
1.749 + template <
1.750 + typename A
1.751 + , typename B
1.752 + , typename C
1.753 + , typename D
1.754 + , typename E
1.755 + , typename F
1.756 + , typename G
1.757 + , typename H
1.758 + , typename I
1.759 + , typename J
1.760 + , typename K
1.761 + , typename L
1.762 + , typename M
1.763 + >
1.764 + struct result { typedef T type; };
1.765 +
1.766 + template <
1.767 + typename A, typename B, typename C, typename D, typename E,
1.768 + typename F, typename G, typename H, typename I, typename J,
1.769 + typename K, typename L, typename M
1.770 + >
1.771 + T operator()(
1.772 + A const& a, B const& b, C const& c, D const& d, E const& e,
1.773 + F const& f, G const& g, H const& h, I const& i, J const& j,
1.774 + K const& k, L const& l, M const& m) const
1.775 + {
1.776 + T t(a, b, c, d, e, f, g, h, i, j, k, l, m);
1.777 + return t;
1.778 + }
1.779 +};
1.780 +
1.781 +template <typename T>
1.782 +struct construct_14 {
1.783 +
1.784 + template <
1.785 + typename A
1.786 + , typename B
1.787 + , typename C
1.788 + , typename D
1.789 + , typename E
1.790 + , typename F
1.791 + , typename G
1.792 + , typename H
1.793 + , typename I
1.794 + , typename J
1.795 + , typename K
1.796 + , typename L
1.797 + , typename M
1.798 + , typename N
1.799 + >
1.800 + struct result { typedef T type; };
1.801 +
1.802 + template <
1.803 + typename A, typename B, typename C, typename D, typename E,
1.804 + typename F, typename G, typename H, typename I, typename J,
1.805 + typename K, typename L, typename M, typename N
1.806 + >
1.807 + T operator()(
1.808 + A const& a, B const& b, C const& c, D const& d, E const& e,
1.809 + F const& f, G const& g, H const& h, I const& i, J const& j,
1.810 + K const& k, L const& l, M const& m, N const& n) const
1.811 + {
1.812 + T t(a, b, c, d, e, f, g, h, i, j, k, l, m, n);
1.813 + return t;
1.814 + }
1.815 +};
1.816 +
1.817 +template <typename T>
1.818 +struct construct_15 {
1.819 +
1.820 + template <
1.821 + typename A
1.822 + , typename B
1.823 + , typename C
1.824 + , typename D
1.825 + , typename E
1.826 + , typename F
1.827 + , typename G
1.828 + , typename H
1.829 + , typename I
1.830 + , typename J
1.831 + , typename K
1.832 + , typename L
1.833 + , typename M
1.834 + , typename N
1.835 + , typename O
1.836 + >
1.837 + struct result { typedef T type; };
1.838 +
1.839 + template <
1.840 + typename A, typename B, typename C, typename D, typename E,
1.841 + typename F, typename G, typename H, typename I, typename J,
1.842 + typename K, typename L, typename M, typename N, typename O
1.843 + >
1.844 + T operator()(
1.845 + A const& a, B const& b, C const& c, D const& d, E const& e,
1.846 + F const& f, G const& g, H const& h, I const& i, J const& j,
1.847 + K const& k, L const& l, M const& m, N const& n, O const& o) const
1.848 + {
1.849 + T t(a, b, c, d, f, e, g, h, i, j, k, l, m, n, o);
1.850 + return t;
1.851 + }
1.852 +};
1.853 +#endif
1.854 +
1.855 +
1.856 +#if defined(__BORLANDC__) || (defined(__MWERKS__) && (__MWERKS__ <= 0x3002))
1.857 +
1.858 +///////////////////////////////////////////////////////////////////////////////
1.859 +//
1.860 +// The following specializations are needed because Borland and CodeWarrior
1.861 +// does not accept default template arguments in nested template classes in
1.862 +// classes (i.e construct_l::result)
1.863 +//
1.864 +///////////////////////////////////////////////////////////////////////////////
1.865 +template <typename T, typename TupleT>
1.866 +struct composite0_result<construct_l_0<T>, TupleT> {
1.867 +
1.868 + typedef T type;
1.869 +};
1.870 +
1.871 +//////////////////////////////////
1.872 +template <typename T, typename TupleT,
1.873 + typename A>
1.874 +struct composite1_result<construct_l<T>, TupleT, A> {
1.875 +
1.876 + typedef T type;
1.877 +};
1.878 +
1.879 +//////////////////////////////////
1.880 +template <typename T, typename TupleT,
1.881 + typename A, typename B>
1.882 +struct composite2_result<construct_l<T>, TupleT, A, B> {
1.883 +
1.884 + typedef T type;
1.885 +};
1.886 +
1.887 +//////////////////////////////////
1.888 +template <typename T, typename TupleT,
1.889 + typename A, typename B, typename C>
1.890 +struct composite3_result<construct_l<T>, TupleT, A, B, C> {
1.891 +
1.892 + typedef T type;
1.893 +};
1.894 +
1.895 +#if PHOENIX_LIMIT > 3
1.896 +//////////////////////////////////
1.897 +template <typename T, typename TupleT,
1.898 + typename A, typename B, typename C, typename D>
1.899 +struct composite4_result<construct_l<T>, TupleT,
1.900 + A, B, C, D> {
1.901 +
1.902 + typedef T type;
1.903 +};
1.904 +
1.905 +//////////////////////////////////
1.906 +template <typename T, typename TupleT,
1.907 + typename A, typename B, typename C, typename D, typename E>
1.908 +struct composite5_result<construct_l<T>, TupleT,
1.909 + A, B, C, D, E> {
1.910 +
1.911 + typedef T type;
1.912 +};
1.913 +
1.914 +//////////////////////////////////
1.915 +template <typename T, typename TupleT,
1.916 + typename A, typename B, typename C, typename D, typename E,
1.917 + typename F>
1.918 +struct composite6_result<construct_l<T>, TupleT,
1.919 + A, B, C, D, E, F> {
1.920 +
1.921 + typedef T type;
1.922 +};
1.923 +
1.924 +#if PHOENIX_LIMIT > 6
1.925 +//////////////////////////////////
1.926 +template <typename T, typename TupleT,
1.927 + typename A, typename B, typename C, typename D, typename E,
1.928 + typename F, typename G>
1.929 +struct composite7_result<construct_l<T>, TupleT,
1.930 + A, B, C, D, E, F, G> {
1.931 +
1.932 + typedef T type;
1.933 +};
1.934 +
1.935 +//////////////////////////////////
1.936 +template <typename T, typename TupleT,
1.937 + typename A, typename B, typename C, typename D, typename E,
1.938 + typename F, typename G, typename H>
1.939 +struct composite8_result<construct_l<T>, TupleT,
1.940 + A, B, C, D, E, F, G, H> {
1.941 +
1.942 + typedef T type;
1.943 +};
1.944 +
1.945 +//////////////////////////////////
1.946 +template <typename T, typename TupleT,
1.947 + typename A, typename B, typename C, typename D, typename E,
1.948 + typename F, typename G, typename H, typename I>
1.949 +struct composite9_result<construct_l<T>, TupleT,
1.950 + A, B, C, D, E, F, G, H, I> {
1.951 +
1.952 + typedef T type;
1.953 +};
1.954 +
1.955 +#if PHOENIX_LIMIT > 9
1.956 +//////////////////////////////////
1.957 +template <typename T, typename TupleT,
1.958 + typename A, typename B, typename C, typename D, typename E,
1.959 + typename F, typename G, typename H, typename I, typename J>
1.960 +struct composite10_result<construct_l<T>, TupleT,
1.961 + A, B, C, D, E, F, G, H, I, J> {
1.962 +
1.963 + typedef T type;
1.964 +};
1.965 +
1.966 +//////////////////////////////////
1.967 +template <typename T, typename TupleT,
1.968 + typename A, typename B, typename C, typename D, typename E,
1.969 + typename F, typename G, typename H, typename I, typename J,
1.970 + typename K>
1.971 +struct composite11_result<construct_l<T>, TupleT,
1.972 + A, B, C, D, E, F, G, H, I, J, K> {
1.973 +
1.974 + typedef T type;
1.975 +};
1.976 +
1.977 +//////////////////////////////////
1.978 +template <typename T, typename TupleT,
1.979 + typename A, typename B, typename C, typename D, typename E,
1.980 + typename F, typename G, typename H, typename I, typename J,
1.981 + typename K, typename L>
1.982 +struct composite12_result<construct_l<T>, TupleT,
1.983 + A, B, C, D, E, F, G, H, I, J, K, L> {
1.984 +
1.985 + typedef T type;
1.986 +};
1.987 +
1.988 +#if PHOENIX_LIMIT > 12
1.989 +//////////////////////////////////
1.990 +template <typename T, typename TupleT,
1.991 + typename A, typename B, typename C, typename D, typename E,
1.992 + typename F, typename G, typename H, typename I, typename J,
1.993 + typename K, typename L, typename M>
1.994 +struct composite13_result<construct_l<T>, TupleT,
1.995 + A, B, C, D, E, F, G, H, I, J, K, L, M> {
1.996 +
1.997 + typedef T type;
1.998 +};
1.999 +
1.1000 +//////////////////////////////////
1.1001 +template <typename T, typename TupleT,
1.1002 + typename A, typename B, typename C, typename D, typename E,
1.1003 + typename F, typename G, typename H, typename I, typename J,
1.1004 + typename K, typename L, typename M, typename N>
1.1005 +struct composite14_result<construct_l<T>, TupleT,
1.1006 + A, B, C, D, E, F, G, H, I, J, K, L, M, N> {
1.1007 +
1.1008 + typedef T type;
1.1009 +};
1.1010 +
1.1011 +//////////////////////////////////
1.1012 +template <typename T, typename TupleT,
1.1013 + typename A, typename B, typename C, typename D, typename E,
1.1014 + typename F, typename G, typename H, typename I, typename J,
1.1015 + typename K, typename L, typename M, typename N, typename O>
1.1016 +struct composite15_result<construct_l<T>, TupleT,
1.1017 + A, B, C, D, E, F, G, H, I, J, K, L, M, N, O> {
1.1018 +
1.1019 + typedef T type;
1.1020 +};
1.1021 +
1.1022 +#endif
1.1023 +#endif
1.1024 +#endif
1.1025 +#endif
1.1026 +#endif
1.1027 +
1.1028 +//////////////////////////////////
1.1029 +template <typename T>
1.1030 +inline typename impl::make_composite<construct_l_0<T> >::type
1.1031 +construct_()
1.1032 +{
1.1033 + typedef impl::make_composite<construct_l_0<T> > make_composite_t;
1.1034 + typedef typename make_composite_t::type type_t;
1.1035 + typedef typename make_composite_t::composite_type composite_type_t;
1.1036 +
1.1037 + return type_t(composite_type_t(construct_l_0<T>()));
1.1038 +}
1.1039 +
1.1040 +//////////////////////////////////
1.1041 +template <typename T, typename A>
1.1042 +inline typename impl::make_composite<construct_1<T>, A>::type
1.1043 +construct_(A const& a)
1.1044 +{
1.1045 + typedef impl::make_composite<construct_1<T>, A> make_composite_t;
1.1046 + typedef typename make_composite_t::type type_t;
1.1047 + typedef typename make_composite_t::composite_type composite_type_t;
1.1048 +
1.1049 + return type_t(composite_type_t(construct_1<T>(),
1.1050 + as_actor<A>::convert(a)
1.1051 + ));
1.1052 +}
1.1053 +
1.1054 +//////////////////////////////////
1.1055 +template <typename T, typename A, typename B>
1.1056 +inline typename impl::make_composite<construct_2<T>, A, B>::type
1.1057 +construct_(A const& a, B const& b)
1.1058 +{
1.1059 + typedef impl::make_composite<construct_2<T>, A, B> make_composite_t;
1.1060 + typedef typename make_composite_t::type type_t;
1.1061 + typedef typename make_composite_t::composite_type composite_type_t;
1.1062 +
1.1063 + return type_t(composite_type_t(construct_2<T>(),
1.1064 + as_actor<A>::convert(a),
1.1065 + as_actor<B>::convert(b)
1.1066 + ));
1.1067 +}
1.1068 +
1.1069 +//////////////////////////////////
1.1070 +template <typename T, typename A, typename B, typename C>
1.1071 +inline typename impl::make_composite<construct_3<T>, A, B, C>::type
1.1072 +construct_(A const& a, B const& b, C const& c)
1.1073 +{
1.1074 + typedef impl::make_composite<construct_3<T>, A, B, C> make_composite_t;
1.1075 + typedef typename make_composite_t::type type_t;
1.1076 + typedef typename make_composite_t::composite_type composite_type_t;
1.1077 +
1.1078 + return type_t(composite_type_t(construct_3<T>(),
1.1079 + as_actor<A>::convert(a),
1.1080 + as_actor<B>::convert(b),
1.1081 + as_actor<C>::convert(c)
1.1082 + ));
1.1083 +}
1.1084 +
1.1085 +#if PHOENIX_CONSTRUCT_LIMIT > 3
1.1086 +//////////////////////////////////
1.1087 +template <
1.1088 + typename T, typename A, typename B, typename C, typename D
1.1089 +>
1.1090 +inline typename impl::make_composite<construct_4<T>, A, B, C, D>::type
1.1091 +construct_(
1.1092 + A const& a, B const& b, C const& c, D const& d)
1.1093 +{
1.1094 + typedef
1.1095 + impl::make_composite<construct_4<T>, A, B, C, D>
1.1096 + make_composite_t;
1.1097 + typedef typename make_composite_t::type type_t;
1.1098 + typedef typename make_composite_t::composite_type composite_type_t;
1.1099 +
1.1100 + return type_t(composite_type_t(construct_4<T>(),
1.1101 + as_actor<A>::convert(a),
1.1102 + as_actor<B>::convert(b),
1.1103 + as_actor<C>::convert(c),
1.1104 + as_actor<D>::convert(d)
1.1105 + ));
1.1106 +}
1.1107 +
1.1108 +//////////////////////////////////
1.1109 +template <
1.1110 + typename T, typename A, typename B, typename C, typename D, typename E
1.1111 +>
1.1112 +inline typename impl::make_composite<construct_5<T>, A, B, C, D, E>::type
1.1113 +construct_(
1.1114 + A const& a, B const& b, C const& c, D const& d, E const& e)
1.1115 +{
1.1116 + typedef
1.1117 + impl::make_composite<construct_5<T>, A, B, C, D, E>
1.1118 + make_composite_t;
1.1119 + typedef typename make_composite_t::type type_t;
1.1120 + typedef typename make_composite_t::composite_type composite_type_t;
1.1121 +
1.1122 + return type_t(composite_type_t(construct_5<T>(),
1.1123 + as_actor<A>::convert(a),
1.1124 + as_actor<B>::convert(b),
1.1125 + as_actor<C>::convert(c),
1.1126 + as_actor<D>::convert(d),
1.1127 + as_actor<E>::convert(e)
1.1128 + ));
1.1129 +}
1.1130 +
1.1131 +//////////////////////////////////
1.1132 +template <
1.1133 + typename T, typename A, typename B, typename C, typename D, typename E,
1.1134 + typename F
1.1135 +>
1.1136 +inline typename impl::make_composite<construct_6<T>, A, B, C, D, E, F>::type
1.1137 +construct_(
1.1138 + A const& a, B const& b, C const& c, D const& d, E const& e,
1.1139 + F const& f)
1.1140 +{
1.1141 + typedef
1.1142 + impl::make_composite<construct_6<T>, A, B, C, D, E, F>
1.1143 + make_composite_t;
1.1144 + typedef typename make_composite_t::type type_t;
1.1145 + typedef typename make_composite_t::composite_type composite_type_t;
1.1146 +
1.1147 + return type_t(composite_type_t(construct_6<T>(),
1.1148 + as_actor<A>::convert(a),
1.1149 + as_actor<B>::convert(b),
1.1150 + as_actor<C>::convert(c),
1.1151 + as_actor<D>::convert(d),
1.1152 + as_actor<E>::convert(e),
1.1153 + as_actor<F>::convert(f)
1.1154 + ));
1.1155 +}
1.1156 +
1.1157 +#if PHOENIX_CONSTRUCT_LIMIT > 6
1.1158 +//////////////////////////////////
1.1159 +template <
1.1160 + typename T, typename A, typename B, typename C, typename D, typename E,
1.1161 + typename F, typename G
1.1162 +>
1.1163 +inline typename impl::make_composite<construct_7<T>, A, B, C, D, E, F, G>::type
1.1164 +construct_(
1.1165 + A const& a, B const& b, C const& c, D const& d, E const& e,
1.1166 + F const& f, G const& g)
1.1167 +{
1.1168 + typedef
1.1169 + impl::make_composite<construct_7<T>, A, B, C, D, E, F, G>
1.1170 + make_composite_t;
1.1171 + typedef typename make_composite_t::type type_t;
1.1172 + typedef typename make_composite_t::composite_type composite_type_t;
1.1173 +
1.1174 + return type_t(composite_type_t(construct_7<T>(),
1.1175 + as_actor<A>::convert(a),
1.1176 + as_actor<B>::convert(b),
1.1177 + as_actor<C>::convert(c),
1.1178 + as_actor<D>::convert(d),
1.1179 + as_actor<E>::convert(e),
1.1180 + as_actor<F>::convert(f),
1.1181 + as_actor<G>::convert(g)
1.1182 + ));
1.1183 +}
1.1184 +
1.1185 +//////////////////////////////////
1.1186 +template <
1.1187 + typename T, typename A, typename B, typename C, typename D, typename E,
1.1188 + typename F, typename G, typename H
1.1189 +>
1.1190 +inline typename impl::make_composite<construct_8<T>, A, B, C, D, E, F, G, H>::type
1.1191 +construct_(
1.1192 + A const& a, B const& b, C const& c, D const& d, E const& e,
1.1193 + F const& f, G const& g, H const& h)
1.1194 +{
1.1195 + typedef
1.1196 + impl::make_composite<construct_8<T>, A, B, C, D, E, F, G, H>
1.1197 + make_composite_t;
1.1198 + typedef typename make_composite_t::type type_t;
1.1199 + typedef typename make_composite_t::composite_type composite_type_t;
1.1200 +
1.1201 + return type_t(composite_type_t(construct_8<T>(),
1.1202 + as_actor<A>::convert(a),
1.1203 + as_actor<B>::convert(b),
1.1204 + as_actor<C>::convert(c),
1.1205 + as_actor<D>::convert(d),
1.1206 + as_actor<E>::convert(e),
1.1207 + as_actor<F>::convert(f),
1.1208 + as_actor<G>::convert(g),
1.1209 + as_actor<H>::convert(h)
1.1210 + ));
1.1211 +}
1.1212 +
1.1213 +//////////////////////////////////
1.1214 +template <
1.1215 + typename T, typename A, typename B, typename C, typename D, typename E,
1.1216 + typename F, typename G, typename H, typename I
1.1217 +>
1.1218 +inline typename impl::make_composite<construct_9<T>, A, B, C, D, E, F, G, H, I>::type
1.1219 +construct_(
1.1220 + A const& a, B const& b, C const& c, D const& d, E const& e,
1.1221 + F const& f, G const& g, H const& h, I const& i)
1.1222 +{
1.1223 + typedef
1.1224 + impl::make_composite<construct_9<T>, A, B, C, D, E, F, G, H, I>
1.1225 + make_composite_t;
1.1226 + typedef typename make_composite_t::type type_t;
1.1227 + typedef typename make_composite_t::composite_type composite_type_t;
1.1228 +
1.1229 + return type_t(composite_type_t(construct_9<T>(),
1.1230 + as_actor<A>::convert(a),
1.1231 + as_actor<B>::convert(b),
1.1232 + as_actor<C>::convert(c),
1.1233 + as_actor<D>::convert(d),
1.1234 + as_actor<E>::convert(e),
1.1235 + as_actor<F>::convert(f),
1.1236 + as_actor<G>::convert(g),
1.1237 + as_actor<H>::convert(h),
1.1238 + as_actor<I>::convert(i)
1.1239 + ));
1.1240 +}
1.1241 +
1.1242 +#if PHOENIX_CONSTRUCT_LIMIT > 9
1.1243 +//////////////////////////////////
1.1244 +template <
1.1245 + typename T, typename A, typename B, typename C, typename D, typename E,
1.1246 + typename F, typename G, typename H, typename I, typename J
1.1247 +>
1.1248 +inline typename impl::make_composite<
1.1249 + construct_10<T>, A, B, C, D, E, F, G, H, I, J>::type
1.1250 +construct_(
1.1251 + A const& a, B const& b, C const& c, D const& d, E const& e,
1.1252 + F const& f, G const& g, H const& h, I const& i, J const& j)
1.1253 +{
1.1254 + typedef
1.1255 + impl::make_composite<
1.1256 + construct_10<T>, A, B, C, D, E, F, G, H, I, J
1.1257 + >
1.1258 + make_composite_t;
1.1259 + typedef typename make_composite_t::type type_t;
1.1260 + typedef typename make_composite_t::composite_type composite_type_t;
1.1261 +
1.1262 + return type_t(composite_type_t(construct_10<T>(),
1.1263 + as_actor<A>::convert(a),
1.1264 + as_actor<B>::convert(b),
1.1265 + as_actor<C>::convert(c),
1.1266 + as_actor<D>::convert(d),
1.1267 + as_actor<E>::convert(e),
1.1268 + as_actor<F>::convert(f),
1.1269 + as_actor<G>::convert(g),
1.1270 + as_actor<H>::convert(h),
1.1271 + as_actor<I>::convert(i),
1.1272 + as_actor<J>::convert(j)
1.1273 + ));
1.1274 +}
1.1275 +
1.1276 +//////////////////////////////////
1.1277 +template <
1.1278 + typename T, typename A, typename B, typename C, typename D, typename E,
1.1279 + typename F, typename G, typename H, typename I, typename J, typename K
1.1280 +>
1.1281 +inline typename impl::make_composite<
1.1282 + construct_11<T>, A, B, C, D, E, F, G, H, I, J, K>::type
1.1283 +construct_(
1.1284 + A const& a, B const& b, C const& c, D const& d, E const& e,
1.1285 + F const& f, G const& g, H const& h, I const& i, J const& j,
1.1286 + K const& k)
1.1287 +{
1.1288 + typedef
1.1289 + impl::make_composite<
1.1290 + construct_11<T>, A, B, C, D, E, F, G, H, I, J, K
1.1291 + >
1.1292 + make_composite_t;
1.1293 + typedef typename make_composite_t::type type_t;
1.1294 + typedef typename make_composite_t::composite_type composite_type_t;
1.1295 +
1.1296 + return type_t(composite_type_t(construct_11<T>(),
1.1297 + as_actor<A>::convert(a),
1.1298 + as_actor<B>::convert(b),
1.1299 + as_actor<C>::convert(c),
1.1300 + as_actor<D>::convert(d),
1.1301 + as_actor<E>::convert(e),
1.1302 + as_actor<F>::convert(f),
1.1303 + as_actor<G>::convert(g),
1.1304 + as_actor<H>::convert(h),
1.1305 + as_actor<I>::convert(i),
1.1306 + as_actor<J>::convert(j),
1.1307 + as_actor<K>::convert(k)
1.1308 + ));
1.1309 +}
1.1310 +
1.1311 +//////////////////////////////////
1.1312 +template <
1.1313 + typename T, typename A, typename B, typename C, typename D, typename E,
1.1314 + typename F, typename G, typename H, typename I, typename J, typename K,
1.1315 + typename L
1.1316 +>
1.1317 +inline typename impl::make_composite<
1.1318 + construct_12<T>, A, B, C, D, E, F, G, H, I, J, K, L>::type
1.1319 +construct_(
1.1320 + A const& a, B const& b, C const& c, D const& d, E const& e,
1.1321 + F const& f, G const& g, H const& h, I const& i, J const& j,
1.1322 + K const& k, L const& l)
1.1323 +{
1.1324 + typedef
1.1325 + impl::make_composite<
1.1326 + construct_12<T>, A, B, C, D, E, F, G, H, I, J, K, L
1.1327 + >
1.1328 + make_composite_t;
1.1329 + typedef typename make_composite_t::type type_t;
1.1330 + typedef typename make_composite_t::composite_type composite_type_t;
1.1331 +
1.1332 + return type_t(composite_type_t(construct_12<T>(),
1.1333 + as_actor<A>::convert(a),
1.1334 + as_actor<B>::convert(b),
1.1335 + as_actor<C>::convert(c),
1.1336 + as_actor<D>::convert(d),
1.1337 + as_actor<E>::convert(e),
1.1338 + as_actor<F>::convert(f),
1.1339 + as_actor<G>::convert(g),
1.1340 + as_actor<H>::convert(h),
1.1341 + as_actor<I>::convert(i),
1.1342 + as_actor<J>::convert(j),
1.1343 + as_actor<K>::convert(k),
1.1344 + as_actor<L>::convert(l)
1.1345 + ));
1.1346 +}
1.1347 +
1.1348 +#if PHOENIX_CONSTRUCT_LIMIT > 12
1.1349 +//////////////////////////////////
1.1350 +template <
1.1351 + typename T, typename A, typename B, typename C, typename D, typename E,
1.1352 + typename F, typename G, typename H, typename I, typename J, typename K,
1.1353 + typename L, typename M
1.1354 +>
1.1355 +inline typename impl::make_composite<
1.1356 + construct_13<T>, A, B, C, D, E, F, G, H, I, J, K, L, M>::type
1.1357 +construct_(
1.1358 + A const& a, B const& b, C const& c, D const& d, E const& e,
1.1359 + F const& f, G const& g, H const& h, I const& i, J const& j,
1.1360 + K const& k, L const& l, M const& m)
1.1361 +{
1.1362 + typedef
1.1363 + impl::make_composite<
1.1364 + construct_13<T>, A, B, C, D, E, F, G, H, I, J, K, L, M
1.1365 + >
1.1366 + make_composite_t;
1.1367 + typedef typename make_composite_t::type type_t;
1.1368 + typedef typename make_composite_t::composite_type composite_type_t;
1.1369 +
1.1370 + return type_t(composite_type_t(construct_13<T>(),
1.1371 + as_actor<A>::convert(a),
1.1372 + as_actor<B>::convert(b),
1.1373 + as_actor<C>::convert(c),
1.1374 + as_actor<D>::convert(d),
1.1375 + as_actor<E>::convert(e),
1.1376 + as_actor<F>::convert(f),
1.1377 + as_actor<G>::convert(g),
1.1378 + as_actor<H>::convert(h),
1.1379 + as_actor<I>::convert(i),
1.1380 + as_actor<J>::convert(j),
1.1381 + as_actor<K>::convert(k),
1.1382 + as_actor<L>::convert(l),
1.1383 + as_actor<M>::convert(m)
1.1384 + ));
1.1385 +}
1.1386 +
1.1387 +//////////////////////////////////
1.1388 +template <
1.1389 + typename T, typename A, typename B, typename C, typename D, typename E,
1.1390 + typename F, typename G, typename H, typename I, typename J, typename K,
1.1391 + typename L, typename M, typename N
1.1392 +>
1.1393 +inline typename impl::make_composite<
1.1394 + construct_14<T>, A, B, C, D, E, F, G, H, I, J, K, L, M>::type
1.1395 +construct_(
1.1396 + A const& a, B const& b, C const& c, D const& d, E const& e,
1.1397 + F const& f, G const& g, H const& h, I const& i, J const& j,
1.1398 + K const& k, L const& l, M const& m, N const& n)
1.1399 +{
1.1400 + typedef
1.1401 + impl::make_composite<
1.1402 + construct_14<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, N
1.1403 + >
1.1404 + make_composite_t;
1.1405 + typedef typename make_composite_t::type type_t;
1.1406 + typedef typename make_composite_t::composite_type composite_type_t;
1.1407 +
1.1408 + return type_t(composite_type_t(construct_14<T>(),
1.1409 + as_actor<A>::convert(a),
1.1410 + as_actor<B>::convert(b),
1.1411 + as_actor<C>::convert(c),
1.1412 + as_actor<D>::convert(d),
1.1413 + as_actor<E>::convert(e),
1.1414 + as_actor<F>::convert(f),
1.1415 + as_actor<G>::convert(g),
1.1416 + as_actor<H>::convert(h),
1.1417 + as_actor<I>::convert(i),
1.1418 + as_actor<J>::convert(j),
1.1419 + as_actor<K>::convert(k),
1.1420 + as_actor<L>::convert(l),
1.1421 + as_actor<M>::convert(m),
1.1422 + as_actor<N>::convert(n)
1.1423 + ));
1.1424 +}
1.1425 +
1.1426 +//////////////////////////////////
1.1427 +template <
1.1428 + typename T, typename A, typename B, typename C, typename D, typename E,
1.1429 + typename F, typename G, typename H, typename I, typename J, typename K,
1.1430 + typename L, typename M, typename N, typename O
1.1431 +>
1.1432 +inline typename impl::make_composite<
1.1433 + construct_15<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, O>::type
1.1434 +construct_(
1.1435 + A const& a, B const& b, C const& c, D const& d, E const& e,
1.1436 + F const& f, G const& g, H const& h, I const& i, J const& j,
1.1437 + K const& k, L const& l, M const& m, N const& n, O const& o)
1.1438 +{
1.1439 + typedef
1.1440 + impl::make_composite<
1.1441 + construct_15<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O
1.1442 + >
1.1443 + make_composite_t;
1.1444 + typedef typename make_composite_t::type type_t;
1.1445 + typedef typename make_composite_t::composite_type composite_type_t;
1.1446 +
1.1447 + return type_t(composite_type_t(construct_15<T>(),
1.1448 + as_actor<A>::convert(a),
1.1449 + as_actor<B>::convert(b),
1.1450 + as_actor<C>::convert(c),
1.1451 + as_actor<D>::convert(d),
1.1452 + as_actor<E>::convert(e),
1.1453 + as_actor<F>::convert(f),
1.1454 + as_actor<G>::convert(g),
1.1455 + as_actor<H>::convert(h),
1.1456 + as_actor<I>::convert(i),
1.1457 + as_actor<J>::convert(j),
1.1458 + as_actor<K>::convert(k),
1.1459 + as_actor<L>::convert(l),
1.1460 + as_actor<M>::convert(m),
1.1461 + as_actor<N>::convert(n),
1.1462 + as_actor<O>::convert(o)
1.1463 + ));
1.1464 +}
1.1465 +
1.1466 +#endif
1.1467 +#endif
1.1468 +#endif
1.1469 +#endif
1.1470 +
1.1471 +///////////////////////////////////////////////////////////////////////////////
1.1472 +} // namespace phoenix
1.1473 +
1.1474 +#endif // PHOENIX_CASTS_HPP