/////////////////////////////////////////////////////////////////////////////// /// \file make_expr_.hpp /// Contains definition of make_expr_\<\> class template. // // Copyright 2008 Eric Niebler. Distributed under the Boost // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) template< typename Tag , typename Domain , typename A0 = void , typename A1 = void , typename A2 = void , typename A3 = void , typename A4 = void , typename A5 = void , typename A6 = void , typename A7 = void , typename A8 = void , typename A9 = void , typename _ = void > struct make_expr_ {}; template struct make_expr_ { typedef typename proto::detail::protoify::result_type result_type; BOOST_FORCEINLINE result_type operator()(typename add_reference::type a) const { return proto::detail::protoify()(a); } }; template struct make_expr_ : make_expr_ {}; template struct make_expr_ { typedef list1< typename boost::proto::detail::protoify< A0 , Domain >::result_type > proto_args; typedef typename base_expr::type expr_type; typedef typename Domain::proto_generator proto_generator; typedef typename proto_generator::template result::type result_type; BOOST_FORCEINLINE result_type operator()(typename add_reference::type a0) const { expr_type const that = { boost::proto::detail::protoify< A0 , Domain >()(a0) }; return proto_generator()(that); } }; template struct make_expr_ : make_expr_< Tag , typename deduce_domain1::type , A0 > {}; template struct make_expr_ { typedef list2< typename boost::proto::detail::protoify< A0 , Domain >::result_type , typename boost::proto::detail::protoify< A1 , Domain >::result_type > proto_args; typedef typename base_expr::type expr_type; typedef typename Domain::proto_generator proto_generator; typedef typename proto_generator::template result::type result_type; BOOST_FORCEINLINE result_type operator()(typename add_reference::type a0 , typename add_reference::type a1) const { expr_type const that = { boost::proto::detail::protoify< A0 , Domain >()(a0) , boost::proto::detail::protoify< A1 , Domain >()(a1) }; return proto_generator()(that); } }; template struct make_expr_ : make_expr_< Tag , typename deduce_domain2::type , A0 , A1 > {}; template struct make_expr_ { typedef list3< typename boost::proto::detail::protoify< A0 , Domain >::result_type , typename boost::proto::detail::protoify< A1 , Domain >::result_type , typename boost::proto::detail::protoify< A2 , Domain >::result_type > proto_args; typedef typename base_expr::type expr_type; typedef typename Domain::proto_generator proto_generator; typedef typename proto_generator::template result::type result_type; BOOST_FORCEINLINE result_type operator()(typename add_reference::type a0 , typename add_reference::type a1 , typename add_reference::type a2) const { expr_type const that = { boost::proto::detail::protoify< A0 , Domain >()(a0) , boost::proto::detail::protoify< A1 , Domain >()(a1) , boost::proto::detail::protoify< A2 , Domain >()(a2) }; return proto_generator()(that); } }; template struct make_expr_ : make_expr_< Tag , typename deduce_domain3::type , A0 , A1 , A2 > {}; template struct make_expr_ { typedef list4< typename boost::proto::detail::protoify< A0 , Domain >::result_type , typename boost::proto::detail::protoify< A1 , Domain >::result_type , typename boost::proto::detail::protoify< A2 , Domain >::result_type , typename boost::proto::detail::protoify< A3 , Domain >::result_type > proto_args; typedef typename base_expr::type expr_type; typedef typename Domain::proto_generator proto_generator; typedef typename proto_generator::template result::type result_type; BOOST_FORCEINLINE result_type operator()(typename add_reference::type a0 , typename add_reference::type a1 , typename add_reference::type a2 , typename add_reference::type a3) const { expr_type const that = { boost::proto::detail::protoify< A0 , Domain >()(a0) , boost::proto::detail::protoify< A1 , Domain >()(a1) , boost::proto::detail::protoify< A2 , Domain >()(a2) , boost::proto::detail::protoify< A3 , Domain >()(a3) }; return proto_generator()(that); } }; template struct make_expr_ : make_expr_< Tag , typename deduce_domain4::type , A0 , A1 , A2 , A3 > {}; template struct make_expr_ { typedef list5< typename boost::proto::detail::protoify< A0 , Domain >::result_type , typename boost::proto::detail::protoify< A1 , Domain >::result_type , typename boost::proto::detail::protoify< A2 , Domain >::result_type , typename boost::proto::detail::protoify< A3 , Domain >::result_type , typename boost::proto::detail::protoify< A4 , Domain >::result_type > proto_args; typedef typename base_expr::type expr_type; typedef typename Domain::proto_generator proto_generator; typedef typename proto_generator::template result::type result_type; BOOST_FORCEINLINE result_type operator()(typename add_reference::type a0 , typename add_reference::type a1 , typename add_reference::type a2 , typename add_reference::type a3 , typename add_reference::type a4) const { expr_type const that = { boost::proto::detail::protoify< A0 , Domain >()(a0) , boost::proto::detail::protoify< A1 , Domain >()(a1) , boost::proto::detail::protoify< A2 , Domain >()(a2) , boost::proto::detail::protoify< A3 , Domain >()(a3) , boost::proto::detail::protoify< A4 , Domain >()(a4) }; return proto_generator()(that); } }; template struct make_expr_ : make_expr_< Tag , typename deduce_domain5::type , A0 , A1 , A2 , A3 , A4 > {}; template struct make_expr_ { typedef list6< typename boost::proto::detail::protoify< A0 , Domain >::result_type , typename boost::proto::detail::protoify< A1 , Domain >::result_type , typename boost::proto::detail::protoify< A2 , Domain >::result_type , typename boost::proto::detail::protoify< A3 , Domain >::result_type , typename boost::proto::detail::protoify< A4 , Domain >::result_type , typename boost::proto::detail::protoify< A5 , Domain >::result_type > proto_args; typedef typename base_expr::type expr_type; typedef typename Domain::proto_generator proto_generator; typedef typename proto_generator::template result::type result_type; BOOST_FORCEINLINE result_type operator()(typename add_reference::type a0 , typename add_reference::type a1 , typename add_reference::type a2 , typename add_reference::type a3 , typename add_reference::type a4 , typename add_reference::type a5) const { expr_type const that = { boost::proto::detail::protoify< A0 , Domain >()(a0) , boost::proto::detail::protoify< A1 , Domain >()(a1) , boost::proto::detail::protoify< A2 , Domain >()(a2) , boost::proto::detail::protoify< A3 , Domain >()(a3) , boost::proto::detail::protoify< A4 , Domain >()(a4) , boost::proto::detail::protoify< A5 , Domain >()(a5) }; return proto_generator()(that); } }; template struct make_expr_ : make_expr_< Tag , typename deduce_domain6::type , A0 , A1 , A2 , A3 , A4 , A5 > {}; template struct make_expr_ { typedef list7< typename boost::proto::detail::protoify< A0 , Domain >::result_type , typename boost::proto::detail::protoify< A1 , Domain >::result_type , typename boost::proto::detail::protoify< A2 , Domain >::result_type , typename boost::proto::detail::protoify< A3 , Domain >::result_type , typename boost::proto::detail::protoify< A4 , Domain >::result_type , typename boost::proto::detail::protoify< A5 , Domain >::result_type , typename boost::proto::detail::protoify< A6 , Domain >::result_type > proto_args; typedef typename base_expr::type expr_type; typedef typename Domain::proto_generator proto_generator; typedef typename proto_generator::template result::type result_type; BOOST_FORCEINLINE result_type operator()(typename add_reference::type a0 , typename add_reference::type a1 , typename add_reference::type a2 , typename add_reference::type a3 , typename add_reference::type a4 , typename add_reference::type a5 , typename add_reference::type a6) const { expr_type const that = { boost::proto::detail::protoify< A0 , Domain >()(a0) , boost::proto::detail::protoify< A1 , Domain >()(a1) , boost::proto::detail::protoify< A2 , Domain >()(a2) , boost::proto::detail::protoify< A3 , Domain >()(a3) , boost::proto::detail::protoify< A4 , Domain >()(a4) , boost::proto::detail::protoify< A5 , Domain >()(a5) , boost::proto::detail::protoify< A6 , Domain >()(a6) }; return proto_generator()(that); } }; template struct make_expr_ : make_expr_< Tag , typename deduce_domain7::type , A0 , A1 , A2 , A3 , A4 , A5 , A6 > {}; template struct make_expr_ { typedef list8< typename boost::proto::detail::protoify< A0 , Domain >::result_type , typename boost::proto::detail::protoify< A1 , Domain >::result_type , typename boost::proto::detail::protoify< A2 , Domain >::result_type , typename boost::proto::detail::protoify< A3 , Domain >::result_type , typename boost::proto::detail::protoify< A4 , Domain >::result_type , typename boost::proto::detail::protoify< A5 , Domain >::result_type , typename boost::proto::detail::protoify< A6 , Domain >::result_type , typename boost::proto::detail::protoify< A7 , Domain >::result_type > proto_args; typedef typename base_expr::type expr_type; typedef typename Domain::proto_generator proto_generator; typedef typename proto_generator::template result::type result_type; BOOST_FORCEINLINE result_type operator()(typename add_reference::type a0 , typename add_reference::type a1 , typename add_reference::type a2 , typename add_reference::type a3 , typename add_reference::type a4 , typename add_reference::type a5 , typename add_reference::type a6 , typename add_reference::type a7) const { expr_type const that = { boost::proto::detail::protoify< A0 , Domain >()(a0) , boost::proto::detail::protoify< A1 , Domain >()(a1) , boost::proto::detail::protoify< A2 , Domain >()(a2) , boost::proto::detail::protoify< A3 , Domain >()(a3) , boost::proto::detail::protoify< A4 , Domain >()(a4) , boost::proto::detail::protoify< A5 , Domain >()(a5) , boost::proto::detail::protoify< A6 , Domain >()(a6) , boost::proto::detail::protoify< A7 , Domain >()(a7) }; return proto_generator()(that); } }; template struct make_expr_ : make_expr_< Tag , typename deduce_domain8::type , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 > {}; template struct make_expr_ { typedef list9< typename boost::proto::detail::protoify< A0 , Domain >::result_type , typename boost::proto::detail::protoify< A1 , Domain >::result_type , typename boost::proto::detail::protoify< A2 , Domain >::result_type , typename boost::proto::detail::protoify< A3 , Domain >::result_type , typename boost::proto::detail::protoify< A4 , Domain >::result_type , typename boost::proto::detail::protoify< A5 , Domain >::result_type , typename boost::proto::detail::protoify< A6 , Domain >::result_type , typename boost::proto::detail::protoify< A7 , Domain >::result_type , typename boost::proto::detail::protoify< A8 , Domain >::result_type > proto_args; typedef typename base_expr::type expr_type; typedef typename Domain::proto_generator proto_generator; typedef typename proto_generator::template result::type result_type; BOOST_FORCEINLINE result_type operator()(typename add_reference::type a0 , typename add_reference::type a1 , typename add_reference::type a2 , typename add_reference::type a3 , typename add_reference::type a4 , typename add_reference::type a5 , typename add_reference::type a6 , typename add_reference::type a7 , typename add_reference::type a8) const { expr_type const that = { boost::proto::detail::protoify< A0 , Domain >()(a0) , boost::proto::detail::protoify< A1 , Domain >()(a1) , boost::proto::detail::protoify< A2 , Domain >()(a2) , boost::proto::detail::protoify< A3 , Domain >()(a3) , boost::proto::detail::protoify< A4 , Domain >()(a4) , boost::proto::detail::protoify< A5 , Domain >()(a5) , boost::proto::detail::protoify< A6 , Domain >()(a6) , boost::proto::detail::protoify< A7 , Domain >()(a7) , boost::proto::detail::protoify< A8 , Domain >()(a8) }; return proto_generator()(that); } }; template struct make_expr_ : make_expr_< Tag , typename deduce_domain9::type , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 > {}; template struct make_expr_ { typedef list10< typename boost::proto::detail::protoify< A0 , Domain >::result_type , typename boost::proto::detail::protoify< A1 , Domain >::result_type , typename boost::proto::detail::protoify< A2 , Domain >::result_type , typename boost::proto::detail::protoify< A3 , Domain >::result_type , typename boost::proto::detail::protoify< A4 , Domain >::result_type , typename boost::proto::detail::protoify< A5 , Domain >::result_type , typename boost::proto::detail::protoify< A6 , Domain >::result_type , typename boost::proto::detail::protoify< A7 , Domain >::result_type , typename boost::proto::detail::protoify< A8 , Domain >::result_type , typename boost::proto::detail::protoify< A9 , Domain >::result_type > proto_args; typedef typename base_expr::type expr_type; typedef typename Domain::proto_generator proto_generator; typedef typename proto_generator::template result::type result_type; BOOST_FORCEINLINE result_type operator()(typename add_reference::type a0 , typename add_reference::type a1 , typename add_reference::type a2 , typename add_reference::type a3 , typename add_reference::type a4 , typename add_reference::type a5 , typename add_reference::type a6 , typename add_reference::type a7 , typename add_reference::type a8 , typename add_reference::type a9) const { expr_type const that = { boost::proto::detail::protoify< A0 , Domain >()(a0) , boost::proto::detail::protoify< A1 , Domain >()(a1) , boost::proto::detail::protoify< A2 , Domain >()(a2) , boost::proto::detail::protoify< A3 , Domain >()(a3) , boost::proto::detail::protoify< A4 , Domain >()(a4) , boost::proto::detail::protoify< A5 , Domain >()(a5) , boost::proto::detail::protoify< A6 , Domain >()(a6) , boost::proto::detail::protoify< A7 , Domain >()(a7) , boost::proto::detail::protoify< A8 , Domain >()(a8) , boost::proto::detail::protoify< A9 , Domain >()(a9) }; return proto_generator()(that); } }; template struct make_expr_ : make_expr_< Tag , typename deduce_domain10::type , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 > {};