Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: /// \file make_expr_.hpp Chris@16: /// Contains definition of make_expr_\<\> class template. Chris@16: // Chris@16: // Copyright 2008 Eric Niebler. Distributed under the Boost Chris@16: // Software License, Version 1.0. (See accompanying file Chris@16: // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: template Chris@16: struct unpack_expr_ Chris@16: {}; Chris@16: template Chris@16: struct unpack_expr_ Chris@16: { Chris@16: typedef Chris@16: typename add_const< Chris@16: typename fusion::result_of::value_of< Chris@16: typename fusion::result_of::begin::type Chris@16: >::type Chris@16: >::type Chris@16: terminal_type; Chris@16: typedef Chris@16: typename proto::detail::protoify< Chris@16: terminal_type Chris@16: , Domain Chris@16: >::result_type Chris@16: type; Chris@16: BOOST_FORCEINLINE Chris@16: static type const call(Sequence const &sequence) Chris@16: { Chris@16: return proto::detail::protoify()(fusion::at_c<0>(sequence)); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct unpack_expr_ Chris@16: : unpack_expr_ Chris@16: {}; Chris@16: template Chris@16: struct unpack_expr_ Chris@16: { Chris@16: typedef typename fusion::result_of::begin::type fusion_iterator0; Chris@16: typedef Chris@16: list1< Chris@16: typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >::result_type Chris@16: > Chris@16: proto_args; Chris@16: typedef typename base_expr::type expr_type; Chris@16: typedef typename Domain::proto_generator proto_generator; Chris@16: typedef typename proto_generator::template result::type type; Chris@16: BOOST_FORCEINLINE Chris@16: static type const call(Sequence const &sequence) Chris@16: { Chris@16: fusion_iterator0 it0 = fusion::begin(sequence); Chris@16: expr_type const that = { Chris@16: detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >()(*it0) Chris@16: }; Chris@16: return proto_generator()(that); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct unpack_expr_ Chris@16: { Chris@16: typedef typename fusion::result_of::begin::type fusion_iterator0; Chris@16: typedef Chris@16: unpack_expr_< Chris@16: Tag Chris@16: , typename deduce_domain1< Chris@16: typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type Chris@16: >::type Chris@16: , Sequence Chris@16: , 1 Chris@16: > Chris@16: other; Chris@16: typedef typename other::type type; Chris@16: BOOST_FORCEINLINE Chris@16: static type const call(Sequence const &sequence) Chris@16: { Chris@16: return other::call(sequence); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct unpack_expr_ Chris@16: { Chris@16: typedef typename fusion::result_of::begin::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; Chris@16: typedef Chris@16: list2< Chris@16: typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >::result_type Chris@16: > Chris@16: proto_args; Chris@16: typedef typename base_expr::type expr_type; Chris@16: typedef typename Domain::proto_generator proto_generator; Chris@16: typedef typename proto_generator::template result::type type; Chris@16: BOOST_FORCEINLINE Chris@16: static type const call(Sequence const &sequence) Chris@16: { Chris@16: fusion_iterator0 it0 = fusion::begin(sequence); fusion_iterator1 it1 = fusion::next(it0); Chris@16: expr_type const that = { Chris@16: detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >()(*it0) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >()(*it1) Chris@16: }; Chris@16: return proto_generator()(that); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct unpack_expr_ Chris@16: { Chris@16: typedef typename fusion::result_of::begin::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; Chris@16: typedef Chris@16: unpack_expr_< Chris@16: Tag Chris@16: , typename deduce_domain2< Chris@16: typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type Chris@16: >::type Chris@16: , Sequence Chris@16: , 2 Chris@16: > Chris@16: other; Chris@16: typedef typename other::type type; Chris@16: BOOST_FORCEINLINE Chris@16: static type const call(Sequence const &sequence) Chris@16: { Chris@16: return other::call(sequence); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct unpack_expr_ Chris@16: { Chris@16: typedef typename fusion::result_of::begin::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; Chris@16: typedef Chris@16: list3< Chris@16: typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >::result_type Chris@16: > Chris@16: proto_args; Chris@16: typedef typename base_expr::type expr_type; Chris@16: typedef typename Domain::proto_generator proto_generator; Chris@16: typedef typename proto_generator::template result::type type; Chris@16: BOOST_FORCEINLINE Chris@16: static type const call(Sequence const &sequence) Chris@16: { Chris@16: fusion_iterator0 it0 = fusion::begin(sequence); fusion_iterator1 it1 = fusion::next(it0); fusion_iterator2 it2 = fusion::next(it1); Chris@16: expr_type const that = { Chris@16: detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >()(*it0) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >()(*it1) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >()(*it2) Chris@16: }; Chris@16: return proto_generator()(that); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct unpack_expr_ Chris@16: { Chris@16: typedef typename fusion::result_of::begin::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; Chris@16: typedef Chris@16: unpack_expr_< Chris@16: Tag Chris@16: , typename deduce_domain3< Chris@16: typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type Chris@16: >::type Chris@16: , Sequence Chris@16: , 3 Chris@16: > Chris@16: other; Chris@16: typedef typename other::type type; Chris@16: BOOST_FORCEINLINE Chris@16: static type const call(Sequence const &sequence) Chris@16: { Chris@16: return other::call(sequence); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct unpack_expr_ Chris@16: { Chris@16: typedef typename fusion::result_of::begin::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; Chris@16: typedef Chris@16: list4< Chris@16: typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >::result_type Chris@16: > Chris@16: proto_args; Chris@16: typedef typename base_expr::type expr_type; Chris@16: typedef typename Domain::proto_generator proto_generator; Chris@16: typedef typename proto_generator::template result::type type; Chris@16: BOOST_FORCEINLINE Chris@16: static type const call(Sequence const &sequence) Chris@16: { Chris@16: fusion_iterator0 it0 = fusion::begin(sequence); fusion_iterator1 it1 = fusion::next(it0); fusion_iterator2 it2 = fusion::next(it1); fusion_iterator3 it3 = fusion::next(it2); Chris@16: expr_type const that = { Chris@16: detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >()(*it0) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >()(*it1) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >()(*it2) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >()(*it3) Chris@16: }; Chris@16: return proto_generator()(that); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct unpack_expr_ Chris@16: { Chris@16: typedef typename fusion::result_of::begin::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; Chris@16: typedef Chris@16: unpack_expr_< Chris@16: Tag Chris@16: , typename deduce_domain4< Chris@16: typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type Chris@16: >::type Chris@16: , Sequence Chris@16: , 4 Chris@16: > Chris@16: other; Chris@16: typedef typename other::type type; Chris@16: BOOST_FORCEINLINE Chris@16: static type const call(Sequence const &sequence) Chris@16: { Chris@16: return other::call(sequence); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct unpack_expr_ Chris@16: { Chris@16: typedef typename fusion::result_of::begin::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4; Chris@16: typedef Chris@16: list5< Chris@16: typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >::result_type Chris@16: > Chris@16: proto_args; Chris@16: typedef typename base_expr::type expr_type; Chris@16: typedef typename Domain::proto_generator proto_generator; Chris@16: typedef typename proto_generator::template result::type type; Chris@16: BOOST_FORCEINLINE Chris@16: static type const call(Sequence const &sequence) Chris@16: { Chris@16: fusion_iterator0 it0 = fusion::begin(sequence); fusion_iterator1 it1 = fusion::next(it0); fusion_iterator2 it2 = fusion::next(it1); fusion_iterator3 it3 = fusion::next(it2); fusion_iterator4 it4 = fusion::next(it3); Chris@16: expr_type const that = { Chris@16: detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >()(*it0) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >()(*it1) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >()(*it2) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >()(*it3) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >()(*it4) Chris@16: }; Chris@16: return proto_generator()(that); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct unpack_expr_ Chris@16: { Chris@16: typedef typename fusion::result_of::begin::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4; Chris@16: typedef Chris@16: unpack_expr_< Chris@16: Tag Chris@16: , typename deduce_domain5< Chris@16: typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type Chris@16: >::type Chris@16: , Sequence Chris@16: , 5 Chris@16: > Chris@16: other; Chris@16: typedef typename other::type type; Chris@16: BOOST_FORCEINLINE Chris@16: static type const call(Sequence const &sequence) Chris@16: { Chris@16: return other::call(sequence); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct unpack_expr_ Chris@16: { Chris@16: typedef typename fusion::result_of::begin::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4; typedef typename fusion::result_of::next< fusion_iterator4>::type fusion_iterator5; Chris@16: typedef Chris@16: list6< Chris@16: typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , Domain >::result_type Chris@16: > Chris@16: proto_args; Chris@16: typedef typename base_expr::type expr_type; Chris@16: typedef typename Domain::proto_generator proto_generator; Chris@16: typedef typename proto_generator::template result::type type; Chris@16: BOOST_FORCEINLINE Chris@16: static type const call(Sequence const &sequence) Chris@16: { Chris@16: fusion_iterator0 it0 = fusion::begin(sequence); fusion_iterator1 it1 = fusion::next(it0); fusion_iterator2 it2 = fusion::next(it1); fusion_iterator3 it3 = fusion::next(it2); fusion_iterator4 it4 = fusion::next(it3); fusion_iterator5 it5 = fusion::next(it4); Chris@16: expr_type const that = { Chris@16: detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >()(*it0) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >()(*it1) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >()(*it2) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >()(*it3) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >()(*it4) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , Domain >()(*it5) Chris@16: }; Chris@16: return proto_generator()(that); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct unpack_expr_ Chris@16: { Chris@16: typedef typename fusion::result_of::begin::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4; typedef typename fusion::result_of::next< fusion_iterator4>::type fusion_iterator5; Chris@16: typedef Chris@16: unpack_expr_< Chris@16: Tag Chris@16: , typename deduce_domain6< Chris@16: typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type Chris@16: >::type Chris@16: , Sequence Chris@16: , 6 Chris@16: > Chris@16: other; Chris@16: typedef typename other::type type; Chris@16: BOOST_FORCEINLINE Chris@16: static type const call(Sequence const &sequence) Chris@16: { Chris@16: return other::call(sequence); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct unpack_expr_ Chris@16: { Chris@16: typedef typename fusion::result_of::begin::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4; typedef typename fusion::result_of::next< fusion_iterator4>::type fusion_iterator5; typedef typename fusion::result_of::next< fusion_iterator5>::type fusion_iterator6; Chris@16: typedef Chris@16: list7< Chris@16: typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , Domain >::result_type Chris@16: > Chris@16: proto_args; Chris@16: typedef typename base_expr::type expr_type; Chris@16: typedef typename Domain::proto_generator proto_generator; Chris@16: typedef typename proto_generator::template result::type type; Chris@16: BOOST_FORCEINLINE Chris@16: static type const call(Sequence const &sequence) Chris@16: { Chris@16: fusion_iterator0 it0 = fusion::begin(sequence); fusion_iterator1 it1 = fusion::next(it0); fusion_iterator2 it2 = fusion::next(it1); fusion_iterator3 it3 = fusion::next(it2); fusion_iterator4 it4 = fusion::next(it3); fusion_iterator5 it5 = fusion::next(it4); fusion_iterator6 it6 = fusion::next(it5); Chris@16: expr_type const that = { Chris@16: detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >()(*it0) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >()(*it1) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >()(*it2) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >()(*it3) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >()(*it4) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , Domain >()(*it5) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , Domain >()(*it6) Chris@16: }; Chris@16: return proto_generator()(that); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct unpack_expr_ Chris@16: { Chris@16: typedef typename fusion::result_of::begin::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4; typedef typename fusion::result_of::next< fusion_iterator4>::type fusion_iterator5; typedef typename fusion::result_of::next< fusion_iterator5>::type fusion_iterator6; Chris@16: typedef Chris@16: unpack_expr_< Chris@16: Tag Chris@16: , typename deduce_domain7< Chris@16: typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type Chris@16: >::type Chris@16: , Sequence Chris@16: , 7 Chris@16: > Chris@16: other; Chris@16: typedef typename other::type type; Chris@16: BOOST_FORCEINLINE Chris@16: static type const call(Sequence const &sequence) Chris@16: { Chris@16: return other::call(sequence); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct unpack_expr_ Chris@16: { Chris@16: typedef typename fusion::result_of::begin::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4; typedef typename fusion::result_of::next< fusion_iterator4>::type fusion_iterator5; typedef typename fusion::result_of::next< fusion_iterator5>::type fusion_iterator6; typedef typename fusion::result_of::next< fusion_iterator6>::type fusion_iterator7; Chris@16: typedef Chris@16: list8< Chris@16: typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator7 >::type >::type , Domain >::result_type Chris@16: > Chris@16: proto_args; Chris@16: typedef typename base_expr::type expr_type; Chris@16: typedef typename Domain::proto_generator proto_generator; Chris@16: typedef typename proto_generator::template result::type type; Chris@16: BOOST_FORCEINLINE Chris@16: static type const call(Sequence const &sequence) Chris@16: { Chris@16: fusion_iterator0 it0 = fusion::begin(sequence); fusion_iterator1 it1 = fusion::next(it0); fusion_iterator2 it2 = fusion::next(it1); fusion_iterator3 it3 = fusion::next(it2); fusion_iterator4 it4 = fusion::next(it3); fusion_iterator5 it5 = fusion::next(it4); fusion_iterator6 it6 = fusion::next(it5); fusion_iterator7 it7 = fusion::next(it6); Chris@16: expr_type const that = { Chris@16: detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >()(*it0) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >()(*it1) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >()(*it2) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >()(*it3) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >()(*it4) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , Domain >()(*it5) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , Domain >()(*it6) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator7 >::type >::type , Domain >()(*it7) Chris@16: }; Chris@16: return proto_generator()(that); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct unpack_expr_ Chris@16: { Chris@16: typedef typename fusion::result_of::begin::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4; typedef typename fusion::result_of::next< fusion_iterator4>::type fusion_iterator5; typedef typename fusion::result_of::next< fusion_iterator5>::type fusion_iterator6; typedef typename fusion::result_of::next< fusion_iterator6>::type fusion_iterator7; Chris@16: typedef Chris@16: unpack_expr_< Chris@16: Tag Chris@16: , typename deduce_domain8< Chris@16: typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator7 >::type >::type Chris@16: >::type Chris@16: , Sequence Chris@16: , 8 Chris@16: > Chris@16: other; Chris@16: typedef typename other::type type; Chris@16: BOOST_FORCEINLINE Chris@16: static type const call(Sequence const &sequence) Chris@16: { Chris@16: return other::call(sequence); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct unpack_expr_ Chris@16: { Chris@16: typedef typename fusion::result_of::begin::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4; typedef typename fusion::result_of::next< fusion_iterator4>::type fusion_iterator5; typedef typename fusion::result_of::next< fusion_iterator5>::type fusion_iterator6; typedef typename fusion::result_of::next< fusion_iterator6>::type fusion_iterator7; typedef typename fusion::result_of::next< fusion_iterator7>::type fusion_iterator8; Chris@16: typedef Chris@16: list9< Chris@16: typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator7 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator8 >::type >::type , Domain >::result_type Chris@16: > Chris@16: proto_args; Chris@16: typedef typename base_expr::type expr_type; Chris@16: typedef typename Domain::proto_generator proto_generator; Chris@16: typedef typename proto_generator::template result::type type; Chris@16: BOOST_FORCEINLINE Chris@16: static type const call(Sequence const &sequence) Chris@16: { Chris@16: fusion_iterator0 it0 = fusion::begin(sequence); fusion_iterator1 it1 = fusion::next(it0); fusion_iterator2 it2 = fusion::next(it1); fusion_iterator3 it3 = fusion::next(it2); fusion_iterator4 it4 = fusion::next(it3); fusion_iterator5 it5 = fusion::next(it4); fusion_iterator6 it6 = fusion::next(it5); fusion_iterator7 it7 = fusion::next(it6); fusion_iterator8 it8 = fusion::next(it7); Chris@16: expr_type const that = { Chris@16: detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >()(*it0) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >()(*it1) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >()(*it2) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >()(*it3) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >()(*it4) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , Domain >()(*it5) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , Domain >()(*it6) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator7 >::type >::type , Domain >()(*it7) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator8 >::type >::type , Domain >()(*it8) Chris@16: }; Chris@16: return proto_generator()(that); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct unpack_expr_ Chris@16: { Chris@16: typedef typename fusion::result_of::begin::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4; typedef typename fusion::result_of::next< fusion_iterator4>::type fusion_iterator5; typedef typename fusion::result_of::next< fusion_iterator5>::type fusion_iterator6; typedef typename fusion::result_of::next< fusion_iterator6>::type fusion_iterator7; typedef typename fusion::result_of::next< fusion_iterator7>::type fusion_iterator8; Chris@16: typedef Chris@16: unpack_expr_< Chris@16: Tag Chris@16: , typename deduce_domain9< Chris@16: typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator7 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator8 >::type >::type Chris@16: >::type Chris@16: , Sequence Chris@16: , 9 Chris@16: > Chris@16: other; Chris@16: typedef typename other::type type; Chris@16: BOOST_FORCEINLINE Chris@16: static type const call(Sequence const &sequence) Chris@16: { Chris@16: return other::call(sequence); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct unpack_expr_ Chris@16: { Chris@16: typedef typename fusion::result_of::begin::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4; typedef typename fusion::result_of::next< fusion_iterator4>::type fusion_iterator5; typedef typename fusion::result_of::next< fusion_iterator5>::type fusion_iterator6; typedef typename fusion::result_of::next< fusion_iterator6>::type fusion_iterator7; typedef typename fusion::result_of::next< fusion_iterator7>::type fusion_iterator8; typedef typename fusion::result_of::next< fusion_iterator8>::type fusion_iterator9; Chris@16: typedef Chris@16: list10< Chris@16: typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator7 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator8 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator9 >::type >::type , Domain >::result_type Chris@16: > Chris@16: proto_args; Chris@16: typedef typename base_expr::type expr_type; Chris@16: typedef typename Domain::proto_generator proto_generator; Chris@16: typedef typename proto_generator::template result::type type; Chris@16: BOOST_FORCEINLINE Chris@16: static type const call(Sequence const &sequence) Chris@16: { Chris@16: fusion_iterator0 it0 = fusion::begin(sequence); fusion_iterator1 it1 = fusion::next(it0); fusion_iterator2 it2 = fusion::next(it1); fusion_iterator3 it3 = fusion::next(it2); fusion_iterator4 it4 = fusion::next(it3); fusion_iterator5 it5 = fusion::next(it4); fusion_iterator6 it6 = fusion::next(it5); fusion_iterator7 it7 = fusion::next(it6); fusion_iterator8 it8 = fusion::next(it7); fusion_iterator9 it9 = fusion::next(it8); Chris@16: expr_type const that = { Chris@16: detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >()(*it0) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >()(*it1) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >()(*it2) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >()(*it3) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >()(*it4) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , Domain >()(*it5) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , Domain >()(*it6) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator7 >::type >::type , Domain >()(*it7) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator8 >::type >::type , Domain >()(*it8) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator9 >::type >::type , Domain >()(*it9) Chris@16: }; Chris@16: return proto_generator()(that); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct unpack_expr_ Chris@16: { Chris@16: typedef typename fusion::result_of::begin::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4; typedef typename fusion::result_of::next< fusion_iterator4>::type fusion_iterator5; typedef typename fusion::result_of::next< fusion_iterator5>::type fusion_iterator6; typedef typename fusion::result_of::next< fusion_iterator6>::type fusion_iterator7; typedef typename fusion::result_of::next< fusion_iterator7>::type fusion_iterator8; typedef typename fusion::result_of::next< fusion_iterator8>::type fusion_iterator9; Chris@16: typedef Chris@16: unpack_expr_< Chris@16: Tag Chris@16: , typename deduce_domain10< Chris@16: typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator7 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator8 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator9 >::type >::type Chris@16: >::type Chris@16: , Sequence Chris@16: , 10 Chris@16: > Chris@16: other; Chris@16: typedef typename other::type type; Chris@16: BOOST_FORCEINLINE Chris@16: static type const call(Sequence const &sequence) Chris@16: { Chris@16: return other::call(sequence); Chris@16: } Chris@16: };