Chris@16: /*============================================================================= Chris@16: Phoenix V1.2.1 Chris@16: Copyright (c) 2001-2003 Joel de Guzman Chris@16: Copyright (c) 2001-2003 Hartmut Kaiser Chris@16: Chris@16: Distributed under the Boost Software License, Version 1.0. (See accompanying Chris@16: file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: ==============================================================================*/ Chris@16: Chris@16: #ifndef PHOENIX_CASTS_HPP Chris@16: #define PHOENIX_CASTS_HPP Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: namespace phoenix { Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // Phoenix predefined maximum construct_ limit. This limit defines the maximum Chris@16: // number of parameters supported for calles to the set of construct_ template Chris@16: // functions (lazy object construction, see below). This number defaults to 3. Chris@16: // The actual maximum is rounded up in multiples of 3. Thus, if this value Chris@16: // is 4, the actual limit is 6. The ultimate maximum limit in this Chris@16: // implementation is 15. Chris@16: // PHOENIX_CONSTRUCT_LIMIT should NOT be greater than PHOENIX_LIMIT! Chris@16: Chris@16: #if !defined(PHOENIX_CONSTRUCT_LIMIT) Chris@16: #define PHOENIX_CONSTRUCT_LIMIT PHOENIX_LIMIT Chris@16: #endif Chris@16: Chris@16: // ensure PHOENIX_CONSTRUCT_LIMIT <= PHOENIX_LIMIT Chris@16: BOOST_STATIC_ASSERT(PHOENIX_CONSTRUCT_LIMIT <= PHOENIX_LIMIT); Chris@16: Chris@16: // ensure PHOENIX_CONSTRUCT_LIMIT <= 15 Chris@16: BOOST_STATIC_ASSERT(PHOENIX_CONSTRUCT_LIMIT <= 15); Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // Lazy C++ casts Chris@16: // Chris@16: // The set of lazy C++ cast template classes and functions provide a way Chris@16: // of lazily casting certain type to another during parsing. Chris@16: // The lazy C++ templates are (syntactically) used very much like Chris@16: // the well known C++ casts: Chris@16: // Chris@16: // A *a = static_cast_(...actor returning a convertible type...); Chris@16: // Chris@16: // where the given parameter should be an actor, which eval() function Chris@16: // returns a convertible type. Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: template Chris@16: struct static_cast_l { Chris@16: Chris@16: template Chris@16: struct result { typedef T type; }; Chris@16: Chris@16: static_cast_l(A const& a_) Chris@16: : a(a_) {} Chris@16: Chris@16: template Chris@16: T Chris@16: eval(TupleT const& args) const Chris@16: { Chris@16: return static_cast(a.eval(args)); Chris@16: } Chris@16: Chris@16: A a; Chris@16: }; Chris@16: Chris@16: ////////////////////////////////// Chris@16: template Chris@16: inline actor > Chris@16: static_cast_(actor const& a) Chris@16: { Chris@16: typedef static_cast_l cast_t; Chris@16: return actor(cast_t(a)); Chris@16: } Chris@16: Chris@16: ////////////////////////////////// Chris@16: template Chris@16: struct dynamic_cast_l { Chris@16: Chris@16: template Chris@16: struct result { typedef T type; }; Chris@16: Chris@16: dynamic_cast_l(A const& a_) Chris@16: : a(a_) {} Chris@16: Chris@16: template Chris@16: T Chris@16: eval(TupleT const& args) const Chris@16: { Chris@16: return dynamic_cast(a.eval(args)); Chris@16: } Chris@16: Chris@16: A a; Chris@16: }; Chris@16: Chris@16: ////////////////////////////////// Chris@16: template Chris@16: inline actor > Chris@16: dynamic_cast_(actor const& a) Chris@16: { Chris@16: typedef dynamic_cast_l cast_t; Chris@16: return actor(cast_t(a)); Chris@16: } Chris@16: Chris@16: ////////////////////////////////// Chris@16: template Chris@16: struct reinterpret_cast_l { Chris@16: Chris@16: template Chris@16: struct result { typedef T type; }; Chris@16: Chris@16: reinterpret_cast_l(A const& a_) Chris@16: : a(a_) {} Chris@16: Chris@16: template Chris@16: T Chris@16: eval(TupleT const& args) const Chris@16: { Chris@16: return reinterpret_cast(a.eval(args)); Chris@16: } Chris@16: Chris@16: A a; Chris@16: }; Chris@16: Chris@16: ////////////////////////////////// Chris@16: template Chris@16: inline actor > Chris@16: reinterpret_cast_(actor const& a) Chris@16: { Chris@16: typedef reinterpret_cast_l cast_t; Chris@16: return actor(cast_t(a)); Chris@16: } Chris@16: Chris@16: ////////////////////////////////// Chris@16: template Chris@16: struct const_cast_l { Chris@16: Chris@16: template Chris@16: struct result { typedef T type; }; Chris@16: Chris@16: const_cast_l(A const& a_) Chris@16: : a(a_) {} Chris@16: Chris@16: template Chris@16: T Chris@16: eval(TupleT const& args) const Chris@16: { Chris@16: return const_cast(a.eval(args)); Chris@16: } Chris@16: Chris@16: A a; Chris@16: }; Chris@16: Chris@16: ////////////////////////////////// Chris@16: template Chris@16: inline actor > Chris@16: const_cast_(actor const& a) Chris@16: { Chris@16: typedef const_cast_l cast_t; Chris@16: return actor(cast_t(a)); Chris@16: } Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // construct_ Chris@16: // Chris@16: // Lazy object construction Chris@16: // Chris@16: // The set of construct_<> template classes and functions provide a way Chris@16: // of lazily constructing certain object from a arbitrary set of Chris@16: // actors during parsing. Chris@16: // The construct_ templates are (syntactically) used very much like Chris@16: // the well known C++ casts: Chris@16: // Chris@16: // A a = construct_(...arbitrary list of actors...); Chris@16: // Chris@16: // where the given parameters are submitted as parameters to the Chris@16: // contructor of the object of type A. (This certainly implies, that Chris@16: // type A has a constructor with a fitting set of parameter types Chris@16: // defined.) Chris@16: // Chris@16: // The maximum number of needed parameters is controlled through the Chris@16: // preprocessor constant PHOENIX_CONSTRUCT_LIMIT. Note though, that this Chris@16: // limit should not be greater than PHOENIX_LIMIT. Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: template Chris@16: struct construct_l_0 { Chris@16: typedef T result_type; Chris@16: Chris@16: T operator()() const { Chris@16: return T(); Chris@16: } Chris@16: }; Chris@16: Chris@16: Chris@16: template Chris@16: struct construct_l { Chris@16: Chris@16: template < Chris@16: typename A Chris@16: , typename B Chris@16: , typename C Chris@16: Chris@16: #if PHOENIX_CONSTRUCT_LIMIT > 3 Chris@16: , typename D Chris@16: , typename E Chris@16: , typename F Chris@16: Chris@16: #if PHOENIX_CONSTRUCT_LIMIT > 6 Chris@16: , typename G Chris@16: , typename H Chris@16: , typename I Chris@16: Chris@16: #if PHOENIX_CONSTRUCT_LIMIT > 9 Chris@16: , typename J Chris@16: , typename K Chris@16: , typename L Chris@16: Chris@16: #if PHOENIX_CONSTRUCT_LIMIT > 12 Chris@16: , typename M Chris@16: , typename N Chris@16: , typename O Chris@16: #endif Chris@16: #endif Chris@16: #endif Chris@16: #endif Chris@16: > Chris@16: struct result { typedef T type; }; Chris@16: Chris@16: T operator()() const Chris@16: { Chris@16: return T(); Chris@16: } Chris@16: Chris@16: template Chris@16: T operator()(A const& a) const Chris@16: { Chris@16: T t(a); Chris@16: return t; Chris@16: } Chris@16: Chris@16: template Chris@16: T operator()(A const& a, B const& b) const Chris@16: { Chris@16: T t(a, b); Chris@16: return t; Chris@16: } Chris@16: Chris@16: template Chris@16: T operator()(A const& a, B const& b, C const& c) const Chris@16: { Chris@16: T t(a, b, c); Chris@16: return t; Chris@16: } Chris@16: Chris@16: #if PHOENIX_CONSTRUCT_LIMIT > 3 Chris@16: template < Chris@16: typename A, typename B, typename C, typename D Chris@16: > Chris@16: T operator()( Chris@16: A const& a, B const& b, C const& c, D const& d) const Chris@16: { Chris@16: T t(a, b, c, d); Chris@16: return t; Chris@16: } Chris@16: Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E Chris@16: > Chris@16: T operator()( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e) const Chris@16: { Chris@16: T t(a, b, c, d, e); Chris@16: return t; Chris@16: } Chris@16: Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, Chris@16: typename F Chris@16: > Chris@16: T operator()( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e, Chris@16: F const& f) const Chris@16: { Chris@16: T t(a, b, c, d, e, f); Chris@16: return t; Chris@16: } Chris@16: Chris@16: #if PHOENIX_CONSTRUCT_LIMIT > 6 Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, Chris@16: typename F, typename G Chris@16: > Chris@16: T operator()( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e, Chris@16: F const& f, G const& g) const Chris@16: { Chris@16: T t(a, b, c, d, e, f, g); Chris@16: return t; Chris@16: } Chris@16: Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, Chris@16: typename F, typename G, typename H Chris@16: > Chris@16: T operator()( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e, Chris@16: F const& f, G const& g, H const& h) const Chris@16: { Chris@16: T t(a, b, c, d, e, f, g, h); Chris@16: return t; Chris@16: } Chris@16: Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, Chris@16: typename F, typename G, typename H, typename I Chris@16: > Chris@16: T operator()( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e, Chris@16: F const& f, G const& g, H const& h, I const& i) const Chris@16: { Chris@16: T t(a, b, c, d, e, f, g, h, i); Chris@16: return t; Chris@16: } Chris@16: Chris@16: #if PHOENIX_CONSTRUCT_LIMIT > 9 Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, Chris@16: typename F, typename G, typename H, typename I, typename J Chris@16: > Chris@16: T operator()( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e, Chris@16: F const& f, G const& g, H const& h, I const& i, J const& j) const Chris@16: { Chris@16: T t(a, b, c, d, e, f, g, h, i, j); Chris@16: return t; Chris@16: } Chris@16: Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, Chris@16: typename F, typename G, typename H, typename I, typename J, Chris@16: typename K Chris@16: > Chris@16: T operator()( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e, Chris@16: F const& f, G const& g, H const& h, I const& i, J const& j, Chris@16: K const& k) const Chris@16: { Chris@16: T t(a, b, c, d, e, f, g, h, i, j, k); Chris@16: return t; Chris@16: } Chris@16: Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, Chris@16: typename F, typename G, typename H, typename I, typename J, Chris@16: typename K, typename L Chris@16: > Chris@16: T operator()( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e, Chris@16: F const& f, G const& g, H const& h, I const& i, J const& j, Chris@16: K const& k, L const& l) const Chris@16: { Chris@16: T t(a, b, c, d, e, f, g, h, i, j, k, l); Chris@16: return t; Chris@16: } Chris@16: Chris@16: #if PHOENIX_CONSTRUCT_LIMIT > 12 Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, Chris@16: typename F, typename G, typename H, typename I, typename J, Chris@16: typename K, typename L, typename M Chris@16: > Chris@16: T operator()( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e, Chris@16: F const& f, G const& g, H const& h, I const& i, J const& j, Chris@16: K const& k, L const& l, M const& m) const Chris@16: { Chris@16: T t(a, b, c, d, e, f, g, h, i, j, k, l, m); Chris@16: return t; Chris@16: } Chris@16: Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, Chris@16: typename F, typename G, typename H, typename I, typename J, Chris@16: typename K, typename L, typename M, typename N Chris@16: > Chris@16: T operator()( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e, Chris@16: F const& f, G const& g, H const& h, I const& i, J const& j, Chris@16: K const& k, L const& l, M const& m, N const& n) const Chris@16: { Chris@16: T t(a, b, c, d, e, f, g, h, i, j, k, l, m, n); Chris@16: return t; Chris@16: } Chris@16: Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, Chris@16: typename F, typename G, typename H, typename I, typename J, Chris@16: typename K, typename L, typename M, typename N, typename O Chris@16: > Chris@16: T operator()( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e, Chris@16: F const& f, G const& g, H const& h, I const& i, J const& j, Chris@16: K const& k, L const& l, M const& m, N const& n, O const& o) const Chris@16: { Chris@16: T t(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o); Chris@16: return t; Chris@16: } Chris@16: Chris@16: #endif Chris@16: #endif Chris@16: #endif Chris@16: #endif Chris@16: }; Chris@16: Chris@16: Chris@16: template Chris@16: struct construct_1 { Chris@16: Chris@16: template < Chris@16: typename A Chris@16: > Chris@16: struct result { typedef T type; }; Chris@16: Chris@16: template Chris@16: T operator()(A const& a) const Chris@16: { Chris@16: T t(a); Chris@16: return t; Chris@16: } Chris@16: Chris@16: }; Chris@16: Chris@16: template Chris@16: struct construct_2 { Chris@16: Chris@16: template < Chris@16: typename A Chris@16: , typename B Chris@16: > Chris@16: struct result { typedef T type; }; Chris@16: Chris@16: template Chris@16: T operator()(A const& a, B const& b) const Chris@16: { Chris@16: T t(a, b); Chris@16: return t; Chris@16: } Chris@16: Chris@16: }; Chris@16: Chris@16: template Chris@16: struct construct_3 { Chris@16: Chris@16: template < Chris@16: typename A Chris@16: , typename B Chris@16: , typename C Chris@16: > Chris@16: struct result { typedef T type; }; Chris@16: Chris@16: template Chris@16: T operator()(A const& a, B const& b, C const& c) const Chris@16: { Chris@16: T t(a, b, c); Chris@16: return t; Chris@16: } Chris@16: }; Chris@16: Chris@16: #if PHOENIX_CONSTRUCT_LIMIT > 3 Chris@16: template Chris@16: struct construct_4 { Chris@16: Chris@16: template < Chris@16: typename A Chris@16: , typename B Chris@16: , typename C Chris@16: , typename D Chris@16: > Chris@16: struct result { typedef T type; }; Chris@16: Chris@16: template < Chris@16: typename A, typename B, typename C, typename D Chris@16: > Chris@16: T operator()( Chris@16: A const& a, B const& b, C const& c, D const& d) const Chris@16: { Chris@16: T t(a, b, c, d); Chris@16: return t; Chris@16: } Chris@16: }; Chris@16: Chris@16: Chris@16: template Chris@16: struct construct_5 { Chris@16: Chris@16: template < Chris@16: typename A Chris@16: , typename B Chris@16: , typename C Chris@16: , typename D Chris@16: , typename E Chris@16: > Chris@16: struct result { typedef T type; }; Chris@16: Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E Chris@16: > Chris@16: T operator()( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e) const Chris@16: { Chris@16: T t(a, b, c, d, e); Chris@16: return t; Chris@16: } Chris@16: }; Chris@16: Chris@16: Chris@16: template Chris@16: struct construct_6 { Chris@16: Chris@16: template < Chris@16: typename A Chris@16: , typename B Chris@16: , typename C Chris@16: , typename D Chris@16: , typename E Chris@16: , typename F Chris@16: > Chris@16: struct result { typedef T type; }; Chris@16: Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, Chris@16: typename F Chris@16: > Chris@16: T operator()( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e, Chris@16: F const& f) const Chris@16: { Chris@16: T t(a, b, c, d, e, f); Chris@16: return t; Chris@16: } Chris@16: }; Chris@16: #endif Chris@16: Chris@16: Chris@16: #if PHOENIX_CONSTRUCT_LIMIT > 6 Chris@16: template Chris@16: struct construct_7 { Chris@16: Chris@16: template < Chris@16: typename A Chris@16: , typename B Chris@16: , typename C Chris@16: , typename D Chris@16: , typename E Chris@16: , typename F Chris@16: , typename G Chris@16: > Chris@16: struct result { typedef T type; }; Chris@16: Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, Chris@16: typename F, typename G Chris@16: > Chris@16: T operator()( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e, Chris@16: F const& f, G const& g) const Chris@16: { Chris@16: T t(a, b, c, d, e, f, g); Chris@16: return t; Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct construct_8 { Chris@16: Chris@16: template < Chris@16: typename A Chris@16: , typename B Chris@16: , typename C Chris@16: , typename D Chris@16: , typename E Chris@16: , typename F Chris@16: , typename G Chris@16: , typename H Chris@16: > Chris@16: struct result { typedef T type; }; Chris@16: Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, Chris@16: typename F, typename G, typename H Chris@16: > Chris@16: T operator()( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e, Chris@16: F const& f, G const& g, H const& h) const Chris@16: { Chris@16: T t(a, b, c, d, e, f, g, h); Chris@16: return t; Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct construct_9 { Chris@16: Chris@16: template < Chris@16: typename A Chris@16: , typename B Chris@16: , typename C Chris@16: , typename D Chris@16: , typename E Chris@16: , typename F Chris@16: , typename G Chris@16: , typename H Chris@16: , typename I Chris@16: > Chris@16: struct result { typedef T type; }; Chris@16: Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, Chris@16: typename F, typename G, typename H, typename I Chris@16: > Chris@16: T operator()( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e, Chris@16: F const& f, G const& g, H const& h, I const& i) const Chris@16: { Chris@16: T t(a, b, c, d, e, f, g, h, i); Chris@16: return t; Chris@16: } Chris@16: }; Chris@16: #endif Chris@16: Chris@16: Chris@16: #if PHOENIX_CONSTRUCT_LIMIT > 9 Chris@16: template Chris@16: struct construct_10 { Chris@16: Chris@16: template < Chris@16: typename A Chris@16: , typename B Chris@16: , typename C Chris@16: , typename D Chris@16: , typename E Chris@16: , typename F Chris@16: , typename G Chris@16: , typename H Chris@16: , typename I Chris@16: , typename J Chris@16: > Chris@16: struct result { typedef T type; }; Chris@16: Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, Chris@16: typename F, typename G, typename H, typename I, typename J Chris@16: > Chris@16: T operator()( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e, Chris@16: F const& f, G const& g, H const& h, I const& i, J const& j) const Chris@16: { Chris@16: T t(a, b, c, d, e, f, g, h, i, j); Chris@16: return t; Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct construct_11 { Chris@16: Chris@16: template < Chris@16: typename A Chris@16: , typename B Chris@16: , typename C Chris@16: , typename D Chris@16: , typename E Chris@16: , typename F Chris@16: , typename G Chris@16: , typename H Chris@16: , typename I Chris@16: , typename J Chris@16: , typename K Chris@16: > Chris@16: struct result { typedef T type; }; Chris@16: Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, Chris@16: typename F, typename G, typename H, typename I, typename J, Chris@16: typename K Chris@16: > Chris@16: T operator()( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e, Chris@16: F const& f, G const& g, H const& h, I const& i, J const& j, Chris@16: K const& k) const Chris@16: { Chris@16: T t(a, b, c, d, e, f, g, h, i, j, k); Chris@16: return t; Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct construct_12 { Chris@16: Chris@16: template < Chris@16: typename A Chris@16: , typename B Chris@16: , typename C Chris@16: , typename D Chris@16: , typename E Chris@16: , typename F Chris@16: , typename G Chris@16: , typename H Chris@16: , typename I Chris@16: , typename J Chris@16: , typename K Chris@16: , typename L Chris@16: > Chris@16: struct result { typedef T type; }; Chris@16: Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, Chris@16: typename F, typename G, typename H, typename I, typename J, Chris@16: typename K, typename L Chris@16: > Chris@16: T operator()( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e, Chris@16: F const& f, G const& g, H const& h, I const& i, J const& j, Chris@16: K const& k, L const& l) const Chris@16: { Chris@16: T t(a, b, c, d, f, e, g, h, i, j, k, l); Chris@16: return t; Chris@16: } Chris@16: }; Chris@16: #endif Chris@16: Chris@16: #if PHOENIX_CONSTRUCT_LIMIT > 12 Chris@16: template Chris@16: struct construct_13 { Chris@16: Chris@16: template < Chris@16: typename A Chris@16: , typename B Chris@16: , typename C Chris@16: , typename D Chris@16: , typename E Chris@16: , typename F Chris@16: , typename G Chris@16: , typename H Chris@16: , typename I Chris@16: , typename J Chris@16: , typename K Chris@16: , typename L Chris@16: , typename M Chris@16: > Chris@16: struct result { typedef T type; }; Chris@16: Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, Chris@16: typename F, typename G, typename H, typename I, typename J, Chris@16: typename K, typename L, typename M Chris@16: > Chris@16: T operator()( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e, Chris@16: F const& f, G const& g, H const& h, I const& i, J const& j, Chris@16: K const& k, L const& l, M const& m) const Chris@16: { Chris@16: T t(a, b, c, d, e, f, g, h, i, j, k, l, m); Chris@16: return t; Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct construct_14 { Chris@16: Chris@16: template < Chris@16: typename A Chris@16: , typename B Chris@16: , typename C Chris@16: , typename D Chris@16: , typename E Chris@16: , typename F Chris@16: , typename G Chris@16: , typename H Chris@16: , typename I Chris@16: , typename J Chris@16: , typename K Chris@16: , typename L Chris@16: , typename M Chris@16: , typename N Chris@16: > Chris@16: struct result { typedef T type; }; Chris@16: Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, Chris@16: typename F, typename G, typename H, typename I, typename J, Chris@16: typename K, typename L, typename M, typename N Chris@16: > Chris@16: T operator()( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e, Chris@16: F const& f, G const& g, H const& h, I const& i, J const& j, Chris@16: K const& k, L const& l, M const& m, N const& n) const Chris@16: { Chris@16: T t(a, b, c, d, e, f, g, h, i, j, k, l, m, n); Chris@16: return t; Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct construct_15 { Chris@16: Chris@16: template < Chris@16: typename A Chris@16: , typename B Chris@16: , typename C Chris@16: , typename D Chris@16: , typename E Chris@16: , typename F Chris@16: , typename G Chris@16: , typename H Chris@16: , typename I Chris@16: , typename J Chris@16: , typename K Chris@16: , typename L Chris@16: , typename M Chris@16: , typename N Chris@16: , typename O Chris@16: > Chris@16: struct result { typedef T type; }; Chris@16: Chris@16: template < Chris@16: typename A, typename B, typename C, typename D, typename E, Chris@16: typename F, typename G, typename H, typename I, typename J, Chris@16: typename K, typename L, typename M, typename N, typename O Chris@16: > Chris@16: T operator()( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e, Chris@16: F const& f, G const& g, H const& h, I const& i, J const& j, Chris@16: K const& k, L const& l, M const& m, N const& n, O const& o) const Chris@16: { Chris@16: T t(a, b, c, d, f, e, g, h, i, j, k, l, m, n, o); Chris@16: return t; Chris@16: } Chris@16: }; Chris@16: #endif Chris@16: Chris@16: Chris@16: #if defined(__BORLANDC__) || (defined(__MWERKS__) && (__MWERKS__ <= 0x3002)) Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // The following specializations are needed because Borland and CodeWarrior Chris@16: // does not accept default template arguments in nested template classes in Chris@16: // classes (i.e construct_l::result) Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: template Chris@16: struct composite0_result, TupleT> { Chris@16: Chris@16: typedef T type; Chris@16: }; Chris@16: Chris@16: ////////////////////////////////// Chris@16: template Chris@16: struct composite1_result, TupleT, A> { Chris@16: Chris@16: typedef T type; Chris@16: }; Chris@16: Chris@16: ////////////////////////////////// Chris@16: template Chris@16: struct composite2_result, TupleT, A, B> { Chris@16: Chris@16: typedef T type; Chris@16: }; Chris@16: Chris@16: ////////////////////////////////// Chris@16: template Chris@16: struct composite3_result, TupleT, A, B, C> { Chris@16: Chris@16: typedef T type; Chris@16: }; Chris@16: Chris@16: #if PHOENIX_LIMIT > 3 Chris@16: ////////////////////////////////// Chris@16: template Chris@16: struct composite4_result, TupleT, Chris@16: A, B, C, D> { Chris@16: Chris@16: typedef T type; Chris@16: }; Chris@16: Chris@16: ////////////////////////////////// Chris@16: template Chris@16: struct composite5_result, TupleT, Chris@16: A, B, C, D, E> { Chris@16: Chris@16: typedef T type; Chris@16: }; Chris@16: Chris@16: ////////////////////////////////// Chris@16: template Chris@16: struct composite6_result, TupleT, Chris@16: A, B, C, D, E, F> { Chris@16: Chris@16: typedef T type; Chris@16: }; Chris@16: Chris@16: #if PHOENIX_LIMIT > 6 Chris@16: ////////////////////////////////// Chris@16: template Chris@16: struct composite7_result, TupleT, Chris@16: A, B, C, D, E, F, G> { Chris@16: Chris@16: typedef T type; Chris@16: }; Chris@16: Chris@16: ////////////////////////////////// Chris@16: template Chris@16: struct composite8_result, TupleT, Chris@16: A, B, C, D, E, F, G, H> { Chris@16: Chris@16: typedef T type; Chris@16: }; Chris@16: Chris@16: ////////////////////////////////// Chris@16: template Chris@16: struct composite9_result, TupleT, Chris@16: A, B, C, D, E, F, G, H, I> { Chris@16: Chris@16: typedef T type; Chris@16: }; Chris@16: Chris@16: #if PHOENIX_LIMIT > 9 Chris@16: ////////////////////////////////// Chris@16: template Chris@16: struct composite10_result, TupleT, Chris@16: A, B, C, D, E, F, G, H, I, J> { Chris@16: Chris@16: typedef T type; Chris@16: }; Chris@16: Chris@16: ////////////////////////////////// Chris@16: template Chris@16: struct composite11_result, TupleT, Chris@16: A, B, C, D, E, F, G, H, I, J, K> { Chris@16: Chris@16: typedef T type; Chris@16: }; Chris@16: Chris@16: ////////////////////////////////// Chris@16: template Chris@16: struct composite12_result, TupleT, Chris@16: A, B, C, D, E, F, G, H, I, J, K, L> { Chris@16: Chris@16: typedef T type; Chris@16: }; Chris@16: Chris@16: #if PHOENIX_LIMIT > 12 Chris@16: ////////////////////////////////// Chris@16: template Chris@16: struct composite13_result, TupleT, Chris@16: A, B, C, D, E, F, G, H, I, J, K, L, M> { Chris@16: Chris@16: typedef T type; Chris@16: }; Chris@16: Chris@16: ////////////////////////////////// Chris@16: template Chris@16: struct composite14_result, TupleT, Chris@16: A, B, C, D, E, F, G, H, I, J, K, L, M, N> { Chris@16: Chris@16: typedef T type; Chris@16: }; Chris@16: Chris@16: ////////////////////////////////// Chris@16: template Chris@16: struct composite15_result, TupleT, Chris@16: A, B, C, D, E, F, G, H, I, J, K, L, M, N, O> { Chris@16: Chris@16: typedef T type; Chris@16: }; Chris@16: Chris@16: #endif Chris@16: #endif Chris@16: #endif Chris@16: #endif Chris@16: #endif Chris@16: Chris@16: ////////////////////////////////// Chris@16: template Chris@16: inline typename impl::make_composite >::type Chris@16: construct_() Chris@16: { Chris@16: typedef impl::make_composite > make_composite_t; Chris@16: typedef typename make_composite_t::type type_t; Chris@16: typedef typename make_composite_t::composite_type composite_type_t; Chris@16: Chris@16: return type_t(composite_type_t(construct_l_0())); Chris@16: } Chris@16: Chris@16: ////////////////////////////////// Chris@16: template Chris@16: inline typename impl::make_composite, A>::type Chris@16: construct_(A const& a) Chris@16: { Chris@16: typedef impl::make_composite, A> make_composite_t; Chris@16: typedef typename make_composite_t::type type_t; Chris@16: typedef typename make_composite_t::composite_type composite_type_t; Chris@16: Chris@16: return type_t(composite_type_t(construct_1(), Chris@16: as_actor::convert(a) Chris@16: )); Chris@16: } Chris@16: Chris@16: ////////////////////////////////// Chris@16: template Chris@16: inline typename impl::make_composite, A, B>::type Chris@16: construct_(A const& a, B const& b) Chris@16: { Chris@16: typedef impl::make_composite, A, B> make_composite_t; Chris@16: typedef typename make_composite_t::type type_t; Chris@16: typedef typename make_composite_t::composite_type composite_type_t; Chris@16: Chris@16: return type_t(composite_type_t(construct_2(), Chris@16: as_actor::convert(a), Chris@16: as_actor::convert(b) Chris@16: )); Chris@16: } Chris@16: Chris@16: ////////////////////////////////// Chris@16: template Chris@16: inline typename impl::make_composite, A, B, C>::type Chris@16: construct_(A const& a, B const& b, C const& c) Chris@16: { Chris@16: typedef impl::make_composite, A, B, C> make_composite_t; Chris@16: typedef typename make_composite_t::type type_t; Chris@16: typedef typename make_composite_t::composite_type composite_type_t; Chris@16: Chris@16: return type_t(composite_type_t(construct_3(), Chris@16: as_actor::convert(a), Chris@16: as_actor::convert(b), Chris@16: as_actor::convert(c) Chris@16: )); Chris@16: } Chris@16: Chris@16: #if PHOENIX_CONSTRUCT_LIMIT > 3 Chris@16: ////////////////////////////////// Chris@16: template < Chris@16: typename T, typename A, typename B, typename C, typename D Chris@16: > Chris@16: inline typename impl::make_composite, A, B, C, D>::type Chris@16: construct_( Chris@16: A const& a, B const& b, C const& c, D const& d) Chris@16: { Chris@16: typedef Chris@16: impl::make_composite, A, B, C, D> Chris@16: make_composite_t; Chris@16: typedef typename make_composite_t::type type_t; Chris@16: typedef typename make_composite_t::composite_type composite_type_t; Chris@16: Chris@16: return type_t(composite_type_t(construct_4(), Chris@16: as_actor::convert(a), Chris@16: as_actor::convert(b), Chris@16: as_actor::convert(c), Chris@16: as_actor::convert(d) Chris@16: )); Chris@16: } Chris@16: Chris@16: ////////////////////////////////// Chris@16: template < Chris@16: typename T, typename A, typename B, typename C, typename D, typename E Chris@16: > Chris@16: inline typename impl::make_composite, A, B, C, D, E>::type Chris@16: construct_( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e) Chris@16: { Chris@16: typedef Chris@16: impl::make_composite, A, B, C, D, E> Chris@16: make_composite_t; Chris@16: typedef typename make_composite_t::type type_t; Chris@16: typedef typename make_composite_t::composite_type composite_type_t; Chris@16: Chris@16: return type_t(composite_type_t(construct_5(), Chris@16: as_actor::convert(a), Chris@16: as_actor::convert(b), Chris@16: as_actor::convert(c), Chris@16: as_actor::convert(d), Chris@16: as_actor::convert(e) Chris@16: )); Chris@16: } Chris@16: Chris@16: ////////////////////////////////// Chris@16: template < Chris@16: typename T, typename A, typename B, typename C, typename D, typename E, Chris@16: typename F Chris@16: > Chris@16: inline typename impl::make_composite, A, B, C, D, E, F>::type Chris@16: construct_( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e, Chris@16: F const& f) Chris@16: { Chris@16: typedef Chris@16: impl::make_composite, A, B, C, D, E, F> Chris@16: make_composite_t; Chris@16: typedef typename make_composite_t::type type_t; Chris@16: typedef typename make_composite_t::composite_type composite_type_t; Chris@16: Chris@16: return type_t(composite_type_t(construct_6(), Chris@16: as_actor::convert(a), Chris@16: as_actor::convert(b), Chris@16: as_actor::convert(c), Chris@16: as_actor::convert(d), Chris@16: as_actor::convert(e), Chris@16: as_actor::convert(f) Chris@16: )); Chris@16: } Chris@16: Chris@16: #if PHOENIX_CONSTRUCT_LIMIT > 6 Chris@16: ////////////////////////////////// Chris@16: template < Chris@16: typename T, typename A, typename B, typename C, typename D, typename E, Chris@16: typename F, typename G Chris@16: > Chris@16: inline typename impl::make_composite, A, B, C, D, E, F, G>::type Chris@16: construct_( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e, Chris@16: F const& f, G const& g) Chris@16: { Chris@16: typedef Chris@16: impl::make_composite, A, B, C, D, E, F, G> Chris@16: make_composite_t; Chris@16: typedef typename make_composite_t::type type_t; Chris@16: typedef typename make_composite_t::composite_type composite_type_t; Chris@16: Chris@16: return type_t(composite_type_t(construct_7(), Chris@16: as_actor::convert(a), Chris@16: as_actor::convert(b), Chris@16: as_actor::convert(c), Chris@16: as_actor::convert(d), Chris@16: as_actor::convert(e), Chris@16: as_actor::convert(f), Chris@16: as_actor::convert(g) Chris@16: )); Chris@16: } Chris@16: Chris@16: ////////////////////////////////// Chris@16: template < Chris@16: typename T, typename A, typename B, typename C, typename D, typename E, Chris@16: typename F, typename G, typename H Chris@16: > Chris@16: inline typename impl::make_composite, A, B, C, D, E, F, G, H>::type Chris@16: construct_( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e, Chris@16: F const& f, G const& g, H const& h) Chris@16: { Chris@16: typedef Chris@16: impl::make_composite, A, B, C, D, E, F, G, H> Chris@16: make_composite_t; Chris@16: typedef typename make_composite_t::type type_t; Chris@16: typedef typename make_composite_t::composite_type composite_type_t; Chris@16: Chris@16: return type_t(composite_type_t(construct_8(), Chris@16: as_actor::convert(a), Chris@16: as_actor::convert(b), Chris@16: as_actor::convert(c), Chris@16: as_actor::convert(d), Chris@16: as_actor::convert(e), Chris@16: as_actor::convert(f), Chris@16: as_actor::convert(g), Chris@16: as_actor::convert(h) Chris@16: )); Chris@16: } Chris@16: Chris@16: ////////////////////////////////// Chris@16: template < Chris@16: typename T, typename A, typename B, typename C, typename D, typename E, Chris@16: typename F, typename G, typename H, typename I Chris@16: > Chris@16: inline typename impl::make_composite, A, B, C, D, E, F, G, H, I>::type Chris@16: construct_( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e, Chris@16: F const& f, G const& g, H const& h, I const& i) Chris@16: { Chris@16: typedef Chris@16: impl::make_composite, A, B, C, D, E, F, G, H, I> Chris@16: make_composite_t; Chris@16: typedef typename make_composite_t::type type_t; Chris@16: typedef typename make_composite_t::composite_type composite_type_t; Chris@16: Chris@16: return type_t(composite_type_t(construct_9(), Chris@16: as_actor::convert(a), Chris@16: as_actor::convert(b), Chris@16: as_actor::convert(c), Chris@16: as_actor::convert(d), Chris@16: as_actor::convert(e), Chris@16: as_actor::convert(f), Chris@16: as_actor::convert(g), Chris@16: as_actor::convert(h), Chris@16: as_actor::convert(i) Chris@16: )); Chris@16: } Chris@16: Chris@16: #if PHOENIX_CONSTRUCT_LIMIT > 9 Chris@16: ////////////////////////////////// Chris@16: template < Chris@16: typename T, typename A, typename B, typename C, typename D, typename E, Chris@16: typename F, typename G, typename H, typename I, typename J Chris@16: > Chris@16: inline typename impl::make_composite< Chris@16: construct_10, A, B, C, D, E, F, G, H, I, J>::type Chris@16: construct_( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e, Chris@16: F const& f, G const& g, H const& h, I const& i, J const& j) Chris@16: { Chris@16: typedef Chris@16: impl::make_composite< Chris@16: construct_10, A, B, C, D, E, F, G, H, I, J Chris@16: > Chris@16: make_composite_t; Chris@16: typedef typename make_composite_t::type type_t; Chris@16: typedef typename make_composite_t::composite_type composite_type_t; Chris@16: Chris@16: return type_t(composite_type_t(construct_10(), Chris@16: as_actor::convert(a), Chris@16: as_actor::convert(b), Chris@16: as_actor::convert(c), Chris@16: as_actor::convert(d), Chris@16: as_actor::convert(e), Chris@16: as_actor::convert(f), Chris@16: as_actor::convert(g), Chris@16: as_actor::convert(h), Chris@16: as_actor::convert(i), Chris@16: as_actor::convert(j) Chris@16: )); Chris@16: } Chris@16: Chris@16: ////////////////////////////////// Chris@16: template < Chris@16: typename T, typename A, typename B, typename C, typename D, typename E, Chris@16: typename F, typename G, typename H, typename I, typename J, typename K Chris@16: > Chris@16: inline typename impl::make_composite< Chris@16: construct_11, A, B, C, D, E, F, G, H, I, J, K>::type Chris@16: construct_( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e, Chris@16: F const& f, G const& g, H const& h, I const& i, J const& j, Chris@16: K const& k) Chris@16: { Chris@16: typedef Chris@16: impl::make_composite< Chris@16: construct_11, A, B, C, D, E, F, G, H, I, J, K Chris@16: > Chris@16: make_composite_t; Chris@16: typedef typename make_composite_t::type type_t; Chris@16: typedef typename make_composite_t::composite_type composite_type_t; Chris@16: Chris@16: return type_t(composite_type_t(construct_11(), Chris@16: as_actor::convert(a), Chris@16: as_actor::convert(b), Chris@16: as_actor::convert(c), Chris@16: as_actor::convert(d), Chris@16: as_actor::convert(e), Chris@16: as_actor::convert(f), Chris@16: as_actor::convert(g), Chris@16: as_actor::convert(h), Chris@16: as_actor::convert(i), Chris@16: as_actor::convert(j), Chris@16: as_actor::convert(k) Chris@16: )); Chris@16: } Chris@16: Chris@16: ////////////////////////////////// Chris@16: template < Chris@16: typename T, typename A, typename B, typename C, typename D, typename E, Chris@16: typename F, typename G, typename H, typename I, typename J, typename K, Chris@16: typename L Chris@16: > Chris@16: inline typename impl::make_composite< Chris@16: construct_12, A, B, C, D, E, F, G, H, I, J, K, L>::type Chris@16: construct_( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e, Chris@16: F const& f, G const& g, H const& h, I const& i, J const& j, Chris@16: K const& k, L const& l) Chris@16: { Chris@16: typedef Chris@16: impl::make_composite< Chris@16: construct_12, A, B, C, D, E, F, G, H, I, J, K, L Chris@16: > Chris@16: make_composite_t; Chris@16: typedef typename make_composite_t::type type_t; Chris@16: typedef typename make_composite_t::composite_type composite_type_t; Chris@16: Chris@16: return type_t(composite_type_t(construct_12(), Chris@16: as_actor::convert(a), Chris@16: as_actor::convert(b), Chris@16: as_actor::convert(c), Chris@16: as_actor::convert(d), Chris@16: as_actor::convert(e), Chris@16: as_actor::convert(f), Chris@16: as_actor::convert(g), Chris@16: as_actor::convert(h), Chris@16: as_actor::convert(i), Chris@16: as_actor::convert(j), Chris@16: as_actor::convert(k), Chris@16: as_actor::convert(l) Chris@16: )); Chris@16: } Chris@16: Chris@16: #if PHOENIX_CONSTRUCT_LIMIT > 12 Chris@16: ////////////////////////////////// Chris@16: template < Chris@16: typename T, typename A, typename B, typename C, typename D, typename E, Chris@16: typename F, typename G, typename H, typename I, typename J, typename K, Chris@16: typename L, typename M Chris@16: > Chris@16: inline typename impl::make_composite< Chris@16: construct_13, A, B, C, D, E, F, G, H, I, J, K, L, M>::type Chris@16: construct_( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e, Chris@16: F const& f, G const& g, H const& h, I const& i, J const& j, Chris@16: K const& k, L const& l, M const& m) Chris@16: { Chris@16: typedef Chris@16: impl::make_composite< Chris@16: construct_13, A, B, C, D, E, F, G, H, I, J, K, L, M Chris@16: > Chris@16: make_composite_t; Chris@16: typedef typename make_composite_t::type type_t; Chris@16: typedef typename make_composite_t::composite_type composite_type_t; Chris@16: Chris@16: return type_t(composite_type_t(construct_13(), Chris@16: as_actor::convert(a), Chris@16: as_actor::convert(b), Chris@16: as_actor::convert(c), Chris@16: as_actor::convert(d), Chris@16: as_actor::convert(e), Chris@16: as_actor::convert(f), Chris@16: as_actor::convert(g), Chris@16: as_actor::convert(h), Chris@16: as_actor::convert(i), Chris@16: as_actor::convert(j), Chris@16: as_actor::convert(k), Chris@16: as_actor::convert(l), Chris@16: as_actor::convert(m) Chris@16: )); Chris@16: } Chris@16: Chris@16: ////////////////////////////////// Chris@16: template < Chris@16: typename T, typename A, typename B, typename C, typename D, typename E, Chris@16: typename F, typename G, typename H, typename I, typename J, typename K, Chris@16: typename L, typename M, typename N Chris@16: > Chris@16: inline typename impl::make_composite< Chris@16: construct_14, A, B, C, D, E, F, G, H, I, J, K, L, M>::type Chris@16: construct_( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e, Chris@16: F const& f, G const& g, H const& h, I const& i, J const& j, Chris@16: K const& k, L const& l, M const& m, N const& n) Chris@16: { Chris@16: typedef Chris@16: impl::make_composite< Chris@16: construct_14, A, B, C, D, E, F, G, H, I, J, K, L, M, N Chris@16: > Chris@16: make_composite_t; Chris@16: typedef typename make_composite_t::type type_t; Chris@16: typedef typename make_composite_t::composite_type composite_type_t; Chris@16: Chris@16: return type_t(composite_type_t(construct_14(), Chris@16: as_actor::convert(a), Chris@16: as_actor::convert(b), Chris@16: as_actor::convert(c), Chris@16: as_actor::convert(d), Chris@16: as_actor::convert(e), Chris@16: as_actor::convert(f), Chris@16: as_actor::convert(g), Chris@16: as_actor::convert(h), Chris@16: as_actor::convert(i), Chris@16: as_actor::convert(j), Chris@16: as_actor::convert(k), Chris@16: as_actor::convert(l), Chris@16: as_actor::convert(m), Chris@16: as_actor::convert(n) Chris@16: )); Chris@16: } Chris@16: Chris@16: ////////////////////////////////// Chris@16: template < Chris@16: typename T, typename A, typename B, typename C, typename D, typename E, Chris@16: typename F, typename G, typename H, typename I, typename J, typename K, Chris@16: typename L, typename M, typename N, typename O Chris@16: > Chris@16: inline typename impl::make_composite< Chris@16: construct_15, A, B, C, D, E, F, G, H, I, J, K, L, M, O>::type Chris@16: construct_( Chris@16: A const& a, B const& b, C const& c, D const& d, E const& e, Chris@16: F const& f, G const& g, H const& h, I const& i, J const& j, Chris@16: K const& k, L const& l, M const& m, N const& n, O const& o) Chris@16: { Chris@16: typedef Chris@16: impl::make_composite< Chris@16: construct_15, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O Chris@16: > Chris@16: make_composite_t; Chris@16: typedef typename make_composite_t::type type_t; Chris@16: typedef typename make_composite_t::composite_type composite_type_t; Chris@16: Chris@16: return type_t(composite_type_t(construct_15(), Chris@16: as_actor::convert(a), Chris@16: as_actor::convert(b), Chris@16: as_actor::convert(c), Chris@16: as_actor::convert(d), Chris@16: as_actor::convert(e), Chris@16: as_actor::convert(f), Chris@16: as_actor::convert(g), Chris@16: as_actor::convert(h), Chris@16: as_actor::convert(i), Chris@16: as_actor::convert(j), Chris@16: as_actor::convert(k), Chris@16: as_actor::convert(l), Chris@16: as_actor::convert(m), Chris@16: as_actor::convert(n), Chris@16: as_actor::convert(o) Chris@16: )); Chris@16: } Chris@16: Chris@16: #endif Chris@16: #endif Chris@16: #endif Chris@16: #endif Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: } // namespace phoenix Chris@16: Chris@16: #endif // PHOENIX_CASTS_HPP