Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:50:28

0001     ///////////////////////////////////////////////////////////////////////////////
0002     /// \file default_function_impl.hpp
0003     /// Contains definition of the default_function_impl, the implementation of the
0004     /// _default transform for function-like nodes.
0005     //
0006     //  Copyright 2008 Eric Niebler. Distributed under the Boost
0007     //  Software License, Version 1.0. (See accompanying file
0008     //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
0009     template<typename Grammar, typename Expr, typename State, typename Data>
0010     struct default_function_impl<Grammar, Expr, State, Data, 3>
0011       : transform_impl<Expr, State, Data>
0012     {
0013         typedef typename result_of::child_c< Expr, 0>::type e0; typedef typename Grammar::template impl<e0, State, Data>::result_type r0; typedef typename result_of::child_c< Expr, 1>::type e1; typedef typename Grammar::template impl<e1, State, Data>::result_type r1; typedef typename result_of::child_c< Expr, 2>::type e2; typedef typename Grammar::template impl<e2, State, Data>::result_type r2;
0014         typedef
0015             typename proto::detail::result_of_fixup<r0>::type
0016         function_type;
0017         typedef
0018             typename BOOST_PROTO_RESULT_OF<
0019                 function_type(r1 , r2)
0020             >::type
0021         result_type;
0022         result_type operator ()(
0023             typename default_function_impl::expr_param e
0024           , typename default_function_impl::state_param s
0025           , typename default_function_impl::data_param d
0026         ) const
0027         {
0028             return this->invoke(e, s, d, is_member_function_pointer<function_type>());
0029         }
0030     private:
0031         result_type invoke(
0032             typename default_function_impl::expr_param e
0033           , typename default_function_impl::state_param s
0034           , typename default_function_impl::data_param d
0035           , mpl::false_
0036         ) const
0037         {
0038             return typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )(
0039                 typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ) , typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d )
0040             );
0041         }
0042         result_type invoke(
0043             typename default_function_impl::expr_param e
0044           , typename default_function_impl::state_param s
0045           , typename default_function_impl::data_param d
0046           , mpl::true_
0047         ) const
0048         {
0049             BOOST_PROTO_USE_GET_POINTER();
0050             typedef typename detail::class_member_traits<function_type>::class_type class_type;
0051             return (
0052                 BOOST_PROTO_GET_POINTER(class_type, (typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ))) ->* 
0053                 typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )
0054             )(typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ));
0055         }
0056     };
0057     template<typename Grammar, typename Expr, typename State, typename Data>
0058     struct default_function_impl<Grammar, Expr, State, Data, 4>
0059       : transform_impl<Expr, State, Data>
0060     {
0061         typedef typename result_of::child_c< Expr, 0>::type e0; typedef typename Grammar::template impl<e0, State, Data>::result_type r0; typedef typename result_of::child_c< Expr, 1>::type e1; typedef typename Grammar::template impl<e1, State, Data>::result_type r1; typedef typename result_of::child_c< Expr, 2>::type e2; typedef typename Grammar::template impl<e2, State, Data>::result_type r2; typedef typename result_of::child_c< Expr, 3>::type e3; typedef typename Grammar::template impl<e3, State, Data>::result_type r3;
0062         typedef
0063             typename proto::detail::result_of_fixup<r0>::type
0064         function_type;
0065         typedef
0066             typename BOOST_PROTO_RESULT_OF<
0067                 function_type(r1 , r2 , r3)
0068             >::type
0069         result_type;
0070         result_type operator ()(
0071             typename default_function_impl::expr_param e
0072           , typename default_function_impl::state_param s
0073           , typename default_function_impl::data_param d
0074         ) const
0075         {
0076             return this->invoke(e, s, d, is_member_function_pointer<function_type>());
0077         }
0078     private:
0079         result_type invoke(
0080             typename default_function_impl::expr_param e
0081           , typename default_function_impl::state_param s
0082           , typename default_function_impl::data_param d
0083           , mpl::false_
0084         ) const
0085         {
0086             return typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )(
0087                 typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ) , typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d )
0088             );
0089         }
0090         result_type invoke(
0091             typename default_function_impl::expr_param e
0092           , typename default_function_impl::state_param s
0093           , typename default_function_impl::data_param d
0094           , mpl::true_
0095         ) const
0096         {
0097             BOOST_PROTO_USE_GET_POINTER();
0098             typedef typename detail::class_member_traits<function_type>::class_type class_type;
0099             return (
0100                 BOOST_PROTO_GET_POINTER(class_type, (typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ))) ->* 
0101                 typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )
0102             )(typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ));
0103         }
0104     };
0105     template<typename Grammar, typename Expr, typename State, typename Data>
0106     struct default_function_impl<Grammar, Expr, State, Data, 5>
0107       : transform_impl<Expr, State, Data>
0108     {
0109         typedef typename result_of::child_c< Expr, 0>::type e0; typedef typename Grammar::template impl<e0, State, Data>::result_type r0; typedef typename result_of::child_c< Expr, 1>::type e1; typedef typename Grammar::template impl<e1, State, Data>::result_type r1; typedef typename result_of::child_c< Expr, 2>::type e2; typedef typename Grammar::template impl<e2, State, Data>::result_type r2; typedef typename result_of::child_c< Expr, 3>::type e3; typedef typename Grammar::template impl<e3, State, Data>::result_type r3; typedef typename result_of::child_c< Expr, 4>::type e4; typedef typename Grammar::template impl<e4, State, Data>::result_type r4;
0110         typedef
0111             typename proto::detail::result_of_fixup<r0>::type
0112         function_type;
0113         typedef
0114             typename BOOST_PROTO_RESULT_OF<
0115                 function_type(r1 , r2 , r3 , r4)
0116             >::type
0117         result_type;
0118         result_type operator ()(
0119             typename default_function_impl::expr_param e
0120           , typename default_function_impl::state_param s
0121           , typename default_function_impl::data_param d
0122         ) const
0123         {
0124             return this->invoke(e, s, d, is_member_function_pointer<function_type>());
0125         }
0126     private:
0127         result_type invoke(
0128             typename default_function_impl::expr_param e
0129           , typename default_function_impl::state_param s
0130           , typename default_function_impl::data_param d
0131           , mpl::false_
0132         ) const
0133         {
0134             return typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )(
0135                 typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ) , typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d )
0136             );
0137         }
0138         result_type invoke(
0139             typename default_function_impl::expr_param e
0140           , typename default_function_impl::state_param s
0141           , typename default_function_impl::data_param d
0142           , mpl::true_
0143         ) const
0144         {
0145             BOOST_PROTO_USE_GET_POINTER();
0146             typedef typename detail::class_member_traits<function_type>::class_type class_type;
0147             return (
0148                 BOOST_PROTO_GET_POINTER(class_type, (typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ))) ->* 
0149                 typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )
0150             )(typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ));
0151         }
0152     };
0153     template<typename Grammar, typename Expr, typename State, typename Data>
0154     struct default_function_impl<Grammar, Expr, State, Data, 6>
0155       : transform_impl<Expr, State, Data>
0156     {
0157         typedef typename result_of::child_c< Expr, 0>::type e0; typedef typename Grammar::template impl<e0, State, Data>::result_type r0; typedef typename result_of::child_c< Expr, 1>::type e1; typedef typename Grammar::template impl<e1, State, Data>::result_type r1; typedef typename result_of::child_c< Expr, 2>::type e2; typedef typename Grammar::template impl<e2, State, Data>::result_type r2; typedef typename result_of::child_c< Expr, 3>::type e3; typedef typename Grammar::template impl<e3, State, Data>::result_type r3; typedef typename result_of::child_c< Expr, 4>::type e4; typedef typename Grammar::template impl<e4, State, Data>::result_type r4; typedef typename result_of::child_c< Expr, 5>::type e5; typedef typename Grammar::template impl<e5, State, Data>::result_type r5;
0158         typedef
0159             typename proto::detail::result_of_fixup<r0>::type
0160         function_type;
0161         typedef
0162             typename BOOST_PROTO_RESULT_OF<
0163                 function_type(r1 , r2 , r3 , r4 , r5)
0164             >::type
0165         result_type;
0166         result_type operator ()(
0167             typename default_function_impl::expr_param e
0168           , typename default_function_impl::state_param s
0169           , typename default_function_impl::data_param d
0170         ) const
0171         {
0172             return this->invoke(e, s, d, is_member_function_pointer<function_type>());
0173         }
0174     private:
0175         result_type invoke(
0176             typename default_function_impl::expr_param e
0177           , typename default_function_impl::state_param s
0178           , typename default_function_impl::data_param d
0179           , mpl::false_
0180         ) const
0181         {
0182             return typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )(
0183                 typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ) , typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ) , typename Grammar::template impl<e5, State, Data>()( proto::child_c< 5>( e), s, d )
0184             );
0185         }
0186         result_type invoke(
0187             typename default_function_impl::expr_param e
0188           , typename default_function_impl::state_param s
0189           , typename default_function_impl::data_param d
0190           , mpl::true_
0191         ) const
0192         {
0193             BOOST_PROTO_USE_GET_POINTER();
0194             typedef typename detail::class_member_traits<function_type>::class_type class_type;
0195             return (
0196                 BOOST_PROTO_GET_POINTER(class_type, (typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ))) ->* 
0197                 typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )
0198             )(typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ) , typename Grammar::template impl<e5, State, Data>()( proto::child_c< 5>( e), s, d ));
0199         }
0200     };
0201     template<typename Grammar, typename Expr, typename State, typename Data>
0202     struct default_function_impl<Grammar, Expr, State, Data, 7>
0203       : transform_impl<Expr, State, Data>
0204     {
0205         typedef typename result_of::child_c< Expr, 0>::type e0; typedef typename Grammar::template impl<e0, State, Data>::result_type r0; typedef typename result_of::child_c< Expr, 1>::type e1; typedef typename Grammar::template impl<e1, State, Data>::result_type r1; typedef typename result_of::child_c< Expr, 2>::type e2; typedef typename Grammar::template impl<e2, State, Data>::result_type r2; typedef typename result_of::child_c< Expr, 3>::type e3; typedef typename Grammar::template impl<e3, State, Data>::result_type r3; typedef typename result_of::child_c< Expr, 4>::type e4; typedef typename Grammar::template impl<e4, State, Data>::result_type r4; typedef typename result_of::child_c< Expr, 5>::type e5; typedef typename Grammar::template impl<e5, State, Data>::result_type r5; typedef typename result_of::child_c< Expr, 6>::type e6; typedef typename Grammar::template impl<e6, State, Data>::result_type r6;
0206         typedef
0207             typename proto::detail::result_of_fixup<r0>::type
0208         function_type;
0209         typedef
0210             typename BOOST_PROTO_RESULT_OF<
0211                 function_type(r1 , r2 , r3 , r4 , r5 , r6)
0212             >::type
0213         result_type;
0214         result_type operator ()(
0215             typename default_function_impl::expr_param e
0216           , typename default_function_impl::state_param s
0217           , typename default_function_impl::data_param d
0218         ) const
0219         {
0220             return this->invoke(e, s, d, is_member_function_pointer<function_type>());
0221         }
0222     private:
0223         result_type invoke(
0224             typename default_function_impl::expr_param e
0225           , typename default_function_impl::state_param s
0226           , typename default_function_impl::data_param d
0227           , mpl::false_
0228         ) const
0229         {
0230             return typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )(
0231                 typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ) , typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ) , typename Grammar::template impl<e5, State, Data>()( proto::child_c< 5>( e), s, d ) , typename Grammar::template impl<e6, State, Data>()( proto::child_c< 6>( e), s, d )
0232             );
0233         }
0234         result_type invoke(
0235             typename default_function_impl::expr_param e
0236           , typename default_function_impl::state_param s
0237           , typename default_function_impl::data_param d
0238           , mpl::true_
0239         ) const
0240         {
0241             BOOST_PROTO_USE_GET_POINTER();
0242             typedef typename detail::class_member_traits<function_type>::class_type class_type;
0243             return (
0244                 BOOST_PROTO_GET_POINTER(class_type, (typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ))) ->* 
0245                 typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )
0246             )(typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ) , typename Grammar::template impl<e5, State, Data>()( proto::child_c< 5>( e), s, d ) , typename Grammar::template impl<e6, State, Data>()( proto::child_c< 6>( e), s, d ));
0247         }
0248     };
0249     template<typename Grammar, typename Expr, typename State, typename Data>
0250     struct default_function_impl<Grammar, Expr, State, Data, 8>
0251       : transform_impl<Expr, State, Data>
0252     {
0253         typedef typename result_of::child_c< Expr, 0>::type e0; typedef typename Grammar::template impl<e0, State, Data>::result_type r0; typedef typename result_of::child_c< Expr, 1>::type e1; typedef typename Grammar::template impl<e1, State, Data>::result_type r1; typedef typename result_of::child_c< Expr, 2>::type e2; typedef typename Grammar::template impl<e2, State, Data>::result_type r2; typedef typename result_of::child_c< Expr, 3>::type e3; typedef typename Grammar::template impl<e3, State, Data>::result_type r3; typedef typename result_of::child_c< Expr, 4>::type e4; typedef typename Grammar::template impl<e4, State, Data>::result_type r4; typedef typename result_of::child_c< Expr, 5>::type e5; typedef typename Grammar::template impl<e5, State, Data>::result_type r5; typedef typename result_of::child_c< Expr, 6>::type e6; typedef typename Grammar::template impl<e6, State, Data>::result_type r6; typedef typename result_of::child_c< Expr, 7>::type e7; typedef typename Grammar::template impl<e7, State, Data>::result_type r7;
0254         typedef
0255             typename proto::detail::result_of_fixup<r0>::type
0256         function_type;
0257         typedef
0258             typename BOOST_PROTO_RESULT_OF<
0259                 function_type(r1 , r2 , r3 , r4 , r5 , r6 , r7)
0260             >::type
0261         result_type;
0262         result_type operator ()(
0263             typename default_function_impl::expr_param e
0264           , typename default_function_impl::state_param s
0265           , typename default_function_impl::data_param d
0266         ) const
0267         {
0268             return this->invoke(e, s, d, is_member_function_pointer<function_type>());
0269         }
0270     private:
0271         result_type invoke(
0272             typename default_function_impl::expr_param e
0273           , typename default_function_impl::state_param s
0274           , typename default_function_impl::data_param d
0275           , mpl::false_
0276         ) const
0277         {
0278             return typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )(
0279                 typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ) , typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ) , typename Grammar::template impl<e5, State, Data>()( proto::child_c< 5>( e), s, d ) , typename Grammar::template impl<e6, State, Data>()( proto::child_c< 6>( e), s, d ) , typename Grammar::template impl<e7, State, Data>()( proto::child_c< 7>( e), s, d )
0280             );
0281         }
0282         result_type invoke(
0283             typename default_function_impl::expr_param e
0284           , typename default_function_impl::state_param s
0285           , typename default_function_impl::data_param d
0286           , mpl::true_
0287         ) const
0288         {
0289             BOOST_PROTO_USE_GET_POINTER();
0290             typedef typename detail::class_member_traits<function_type>::class_type class_type;
0291             return (
0292                 BOOST_PROTO_GET_POINTER(class_type, (typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ))) ->* 
0293                 typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )
0294             )(typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ) , typename Grammar::template impl<e5, State, Data>()( proto::child_c< 5>( e), s, d ) , typename Grammar::template impl<e6, State, Data>()( proto::child_c< 6>( e), s, d ) , typename Grammar::template impl<e7, State, Data>()( proto::child_c< 7>( e), s, d ));
0295         }
0296     };
0297     template<typename Grammar, typename Expr, typename State, typename Data>
0298     struct default_function_impl<Grammar, Expr, State, Data, 9>
0299       : transform_impl<Expr, State, Data>
0300     {
0301         typedef typename result_of::child_c< Expr, 0>::type e0; typedef typename Grammar::template impl<e0, State, Data>::result_type r0; typedef typename result_of::child_c< Expr, 1>::type e1; typedef typename Grammar::template impl<e1, State, Data>::result_type r1; typedef typename result_of::child_c< Expr, 2>::type e2; typedef typename Grammar::template impl<e2, State, Data>::result_type r2; typedef typename result_of::child_c< Expr, 3>::type e3; typedef typename Grammar::template impl<e3, State, Data>::result_type r3; typedef typename result_of::child_c< Expr, 4>::type e4; typedef typename Grammar::template impl<e4, State, Data>::result_type r4; typedef typename result_of::child_c< Expr, 5>::type e5; typedef typename Grammar::template impl<e5, State, Data>::result_type r5; typedef typename result_of::child_c< Expr, 6>::type e6; typedef typename Grammar::template impl<e6, State, Data>::result_type r6; typedef typename result_of::child_c< Expr, 7>::type e7; typedef typename Grammar::template impl<e7, State, Data>::result_type r7; typedef typename result_of::child_c< Expr, 8>::type e8; typedef typename Grammar::template impl<e8, State, Data>::result_type r8;
0302         typedef
0303             typename proto::detail::result_of_fixup<r0>::type
0304         function_type;
0305         typedef
0306             typename BOOST_PROTO_RESULT_OF<
0307                 function_type(r1 , r2 , r3 , r4 , r5 , r6 , r7 , r8)
0308             >::type
0309         result_type;
0310         result_type operator ()(
0311             typename default_function_impl::expr_param e
0312           , typename default_function_impl::state_param s
0313           , typename default_function_impl::data_param d
0314         ) const
0315         {
0316             return this->invoke(e, s, d, is_member_function_pointer<function_type>());
0317         }
0318     private:
0319         result_type invoke(
0320             typename default_function_impl::expr_param e
0321           , typename default_function_impl::state_param s
0322           , typename default_function_impl::data_param d
0323           , mpl::false_
0324         ) const
0325         {
0326             return typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )(
0327                 typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ) , typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ) , typename Grammar::template impl<e5, State, Data>()( proto::child_c< 5>( e), s, d ) , typename Grammar::template impl<e6, State, Data>()( proto::child_c< 6>( e), s, d ) , typename Grammar::template impl<e7, State, Data>()( proto::child_c< 7>( e), s, d ) , typename Grammar::template impl<e8, State, Data>()( proto::child_c< 8>( e), s, d )
0328             );
0329         }
0330         result_type invoke(
0331             typename default_function_impl::expr_param e
0332           , typename default_function_impl::state_param s
0333           , typename default_function_impl::data_param d
0334           , mpl::true_
0335         ) const
0336         {
0337             BOOST_PROTO_USE_GET_POINTER();
0338             typedef typename detail::class_member_traits<function_type>::class_type class_type;
0339             return (
0340                 BOOST_PROTO_GET_POINTER(class_type, (typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ))) ->* 
0341                 typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )
0342             )(typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ) , typename Grammar::template impl<e5, State, Data>()( proto::child_c< 5>( e), s, d ) , typename Grammar::template impl<e6, State, Data>()( proto::child_c< 6>( e), s, d ) , typename Grammar::template impl<e7, State, Data>()( proto::child_c< 7>( e), s, d ) , typename Grammar::template impl<e8, State, Data>()( proto::child_c< 8>( e), s, d ));
0343         }
0344     };
0345     template<typename Grammar, typename Expr, typename State, typename Data>
0346     struct default_function_impl<Grammar, Expr, State, Data, 10>
0347       : transform_impl<Expr, State, Data>
0348     {
0349         typedef typename result_of::child_c< Expr, 0>::type e0; typedef typename Grammar::template impl<e0, State, Data>::result_type r0; typedef typename result_of::child_c< Expr, 1>::type e1; typedef typename Grammar::template impl<e1, State, Data>::result_type r1; typedef typename result_of::child_c< Expr, 2>::type e2; typedef typename Grammar::template impl<e2, State, Data>::result_type r2; typedef typename result_of::child_c< Expr, 3>::type e3; typedef typename Grammar::template impl<e3, State, Data>::result_type r3; typedef typename result_of::child_c< Expr, 4>::type e4; typedef typename Grammar::template impl<e4, State, Data>::result_type r4; typedef typename result_of::child_c< Expr, 5>::type e5; typedef typename Grammar::template impl<e5, State, Data>::result_type r5; typedef typename result_of::child_c< Expr, 6>::type e6; typedef typename Grammar::template impl<e6, State, Data>::result_type r6; typedef typename result_of::child_c< Expr, 7>::type e7; typedef typename Grammar::template impl<e7, State, Data>::result_type r7; typedef typename result_of::child_c< Expr, 8>::type e8; typedef typename Grammar::template impl<e8, State, Data>::result_type r8; typedef typename result_of::child_c< Expr, 9>::type e9; typedef typename Grammar::template impl<e9, State, Data>::result_type r9;
0350         typedef
0351             typename proto::detail::result_of_fixup<r0>::type
0352         function_type;
0353         typedef
0354             typename BOOST_PROTO_RESULT_OF<
0355                 function_type(r1 , r2 , r3 , r4 , r5 , r6 , r7 , r8 , r9)
0356             >::type
0357         result_type;
0358         result_type operator ()(
0359             typename default_function_impl::expr_param e
0360           , typename default_function_impl::state_param s
0361           , typename default_function_impl::data_param d
0362         ) const
0363         {
0364             return this->invoke(e, s, d, is_member_function_pointer<function_type>());
0365         }
0366     private:
0367         result_type invoke(
0368             typename default_function_impl::expr_param e
0369           , typename default_function_impl::state_param s
0370           , typename default_function_impl::data_param d
0371           , mpl::false_
0372         ) const
0373         {
0374             return typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )(
0375                 typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ) , typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ) , typename Grammar::template impl<e5, State, Data>()( proto::child_c< 5>( e), s, d ) , typename Grammar::template impl<e6, State, Data>()( proto::child_c< 6>( e), s, d ) , typename Grammar::template impl<e7, State, Data>()( proto::child_c< 7>( e), s, d ) , typename Grammar::template impl<e8, State, Data>()( proto::child_c< 8>( e), s, d ) , typename Grammar::template impl<e9, State, Data>()( proto::child_c< 9>( e), s, d )
0376             );
0377         }
0378         result_type invoke(
0379             typename default_function_impl::expr_param e
0380           , typename default_function_impl::state_param s
0381           , typename default_function_impl::data_param d
0382           , mpl::true_
0383         ) const
0384         {
0385             BOOST_PROTO_USE_GET_POINTER();
0386             typedef typename detail::class_member_traits<function_type>::class_type class_type;
0387             return (
0388                 BOOST_PROTO_GET_POINTER(class_type, (typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ))) ->* 
0389                 typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )
0390             )(typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ) , typename Grammar::template impl<e5, State, Data>()( proto::child_c< 5>( e), s, d ) , typename Grammar::template impl<e6, State, Data>()( proto::child_c< 6>( e), s, d ) , typename Grammar::template impl<e7, State, Data>()( proto::child_c< 7>( e), s, d ) , typename Grammar::template impl<e8, State, Data>()( proto::child_c< 8>( e), s, d ) , typename Grammar::template impl<e9, State, Data>()( proto::child_c< 9>( e), s, d ));
0391         }
0392     };