Back to home page

EIC code displayed by LXR

 
 

    


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

0001     ///////////////////////////////////////////////////////////////////////////////
0002     /// \file basic_expr.hpp
0003     /// Contains definition of basic_expr\<\> class template.
0004     //
0005     //  Copyright 2008 Eric Niebler. Distributed under the Boost
0006     //  Software License, Version 1.0. (See accompanying file
0007     //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
0008     
0009     
0010     
0011     
0012     
0013     
0014     
0015     
0016     
0017     
0018     
0019     
0020     
0021     
0022     
0023     
0024     
0025     
0026     
0027     
0028     
0029     
0030     
0031     
0032     
0033     
0034     
0035     
0036     template<typename Tag, typename Arg0>
0037     struct basic_expr<Tag, term<Arg0>, 0>
0038     {
0039         typedef Tag proto_tag;
0040         static const long proto_arity_c = 0;
0041         typedef mpl::long_<0 > proto_arity;
0042         typedef basic_expr proto_base_expr;
0043         typedef term<Arg0> proto_args;
0044         typedef basic_expr proto_grammar;
0045         typedef basic_default_domain proto_domain;
0046         typedef default_generator proto_generator;
0047         typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
0048         typedef basic_expr proto_derived_expr;
0049         typedef void proto_is_expr_; 
0050         typedef Arg0 proto_child0; proto_child0 child0;
0051         typedef void proto_child1; typedef void proto_child2; typedef void proto_child3; typedef void proto_child4; typedef void proto_child5; typedef void proto_child6; typedef void proto_child7; typedef void proto_child8; typedef void proto_child9;
0052         
0053         
0054         BOOST_FORCEINLINE
0055         basic_expr const &proto_base() const
0056         {
0057             return *this;
0058         }
0059         
0060         
0061         BOOST_FORCEINLINE
0062         basic_expr &proto_base()
0063         {
0064             return *this;
0065         }
0066         
0067         
0068         
0069         template<typename A0>
0070         BOOST_FORCEINLINE
0071         static basic_expr const make(A0 &a0)
0072         {
0073             return detail::make_terminal(a0, static_cast<basic_expr *>(0), static_cast<proto_args *>(0));
0074         }
0075         
0076         
0077         template<typename A0>
0078         BOOST_FORCEINLINE
0079         static basic_expr const make(A0 const &a0)
0080         {
0081             return detail::make_terminal(a0, static_cast<basic_expr *>(0), static_cast<proto_args *>(0));
0082         }
0083         
0084         
0085         typedef detail::not_a_valid_type address_of_hack_type_;
0086     };
0087     
0088     
0089     
0090     
0091     
0092     
0093     
0094     
0095     
0096     
0097     
0098     
0099     
0100     
0101     
0102     
0103     
0104     
0105     
0106     
0107     
0108     
0109     
0110     
0111     
0112     
0113     
0114     template<typename Tag , typename Arg0>
0115     struct basic_expr<Tag, list1<Arg0>, 1 >
0116     {
0117         typedef Tag proto_tag;
0118         static const long proto_arity_c = 1;
0119         typedef mpl::long_<1 > proto_arity;
0120         typedef basic_expr proto_base_expr;
0121         typedef list1<Arg0> proto_args;
0122         typedef basic_expr proto_grammar;
0123         typedef basic_default_domain proto_domain;
0124         typedef default_generator proto_generator;
0125         typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
0126         typedef basic_expr proto_derived_expr;
0127         typedef void proto_is_expr_; 
0128         typedef Arg0 proto_child0; proto_child0 child0;
0129         typedef void proto_child1; typedef void proto_child2; typedef void proto_child3; typedef void proto_child4; typedef void proto_child5; typedef void proto_child6; typedef void proto_child7; typedef void proto_child8; typedef void proto_child9;
0130         
0131         
0132         BOOST_FORCEINLINE
0133         basic_expr const &proto_base() const
0134         {
0135             return *this;
0136         }
0137         
0138         
0139         BOOST_FORCEINLINE
0140         basic_expr &proto_base()
0141         {
0142             return *this;
0143         }
0144         
0145         
0146         
0147         template<typename A0>
0148         BOOST_FORCEINLINE
0149         static basic_expr const make(A0 const &a0)
0150         {
0151             basic_expr that = {a0};
0152             return that;
0153         }
0154         
0155         
0156         
0157         typedef typename detail::address_of_hack<Tag, proto_child0>::type address_of_hack_type_;
0158         
0159         
0160         
0161         
0162         
0163         
0164         
0165         BOOST_FORCEINLINE
0166         operator address_of_hack_type_() const
0167         {
0168             return boost::addressof(this->child0);
0169         }
0170     };
0171     
0172     
0173     
0174     
0175     
0176     
0177     
0178     
0179     
0180     
0181     
0182     
0183     
0184     
0185     
0186     
0187     
0188     
0189     
0190     
0191     
0192     
0193     
0194     
0195     
0196     
0197     
0198     template<typename Tag , typename Arg0 , typename Arg1>
0199     struct basic_expr<Tag, list2<Arg0 , Arg1>, 2 >
0200     {
0201         typedef Tag proto_tag;
0202         static const long proto_arity_c = 2;
0203         typedef mpl::long_<2 > proto_arity;
0204         typedef basic_expr proto_base_expr;
0205         typedef list2<Arg0 , Arg1> proto_args;
0206         typedef basic_expr proto_grammar;
0207         typedef basic_default_domain proto_domain;
0208         typedef default_generator proto_generator;
0209         typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
0210         typedef basic_expr proto_derived_expr;
0211         typedef void proto_is_expr_; 
0212         typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1;
0213         typedef void proto_child2; typedef void proto_child3; typedef void proto_child4; typedef void proto_child5; typedef void proto_child6; typedef void proto_child7; typedef void proto_child8; typedef void proto_child9;
0214         
0215         
0216         BOOST_FORCEINLINE
0217         basic_expr const &proto_base() const
0218         {
0219             return *this;
0220         }
0221         
0222         
0223         BOOST_FORCEINLINE
0224         basic_expr &proto_base()
0225         {
0226             return *this;
0227         }
0228         
0229         
0230         
0231         template<typename A0 , typename A1>
0232         BOOST_FORCEINLINE
0233         static basic_expr const make(A0 const &a0 , A1 const &a1)
0234         {
0235             basic_expr that = {a0 , a1};
0236             return that;
0237         }
0238         
0239         
0240         typedef detail::not_a_valid_type address_of_hack_type_;
0241     };
0242     
0243     
0244     
0245     
0246     
0247     
0248     
0249     
0250     
0251     
0252     
0253     
0254     
0255     
0256     
0257     
0258     
0259     
0260     
0261     
0262     
0263     
0264     
0265     
0266     
0267     
0268     
0269     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2>
0270     struct basic_expr<Tag, list3<Arg0 , Arg1 , Arg2>, 3 >
0271     {
0272         typedef Tag proto_tag;
0273         static const long proto_arity_c = 3;
0274         typedef mpl::long_<3 > proto_arity;
0275         typedef basic_expr proto_base_expr;
0276         typedef list3<Arg0 , Arg1 , Arg2> proto_args;
0277         typedef basic_expr proto_grammar;
0278         typedef basic_default_domain proto_domain;
0279         typedef default_generator proto_generator;
0280         typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
0281         typedef basic_expr proto_derived_expr;
0282         typedef void proto_is_expr_; 
0283         typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2;
0284         typedef void proto_child3; typedef void proto_child4; typedef void proto_child5; typedef void proto_child6; typedef void proto_child7; typedef void proto_child8; typedef void proto_child9;
0285         
0286         
0287         BOOST_FORCEINLINE
0288         basic_expr const &proto_base() const
0289         {
0290             return *this;
0291         }
0292         
0293         
0294         BOOST_FORCEINLINE
0295         basic_expr &proto_base()
0296         {
0297             return *this;
0298         }
0299         
0300         
0301         
0302         template<typename A0 , typename A1 , typename A2>
0303         BOOST_FORCEINLINE
0304         static basic_expr const make(A0 const &a0 , A1 const &a1 , A2 const &a2)
0305         {
0306             basic_expr that = {a0 , a1 , a2};
0307             return that;
0308         }
0309         
0310         
0311         typedef detail::not_a_valid_type address_of_hack_type_;
0312     };
0313     
0314     
0315     
0316     
0317     
0318     
0319     
0320     
0321     
0322     
0323     
0324     
0325     
0326     
0327     
0328     
0329     
0330     
0331     
0332     
0333     
0334     
0335     
0336     
0337     
0338     
0339     
0340     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3>
0341     struct basic_expr<Tag, list4<Arg0 , Arg1 , Arg2 , Arg3>, 4 >
0342     {
0343         typedef Tag proto_tag;
0344         static const long proto_arity_c = 4;
0345         typedef mpl::long_<4 > proto_arity;
0346         typedef basic_expr proto_base_expr;
0347         typedef list4<Arg0 , Arg1 , Arg2 , Arg3> proto_args;
0348         typedef basic_expr proto_grammar;
0349         typedef basic_default_domain proto_domain;
0350         typedef default_generator proto_generator;
0351         typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
0352         typedef basic_expr proto_derived_expr;
0353         typedef void proto_is_expr_; 
0354         typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3;
0355         typedef void proto_child4; typedef void proto_child5; typedef void proto_child6; typedef void proto_child7; typedef void proto_child8; typedef void proto_child9;
0356         
0357         
0358         BOOST_FORCEINLINE
0359         basic_expr const &proto_base() const
0360         {
0361             return *this;
0362         }
0363         
0364         
0365         BOOST_FORCEINLINE
0366         basic_expr &proto_base()
0367         {
0368             return *this;
0369         }
0370         
0371         
0372         
0373         template<typename A0 , typename A1 , typename A2 , typename A3>
0374         BOOST_FORCEINLINE
0375         static basic_expr const make(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3)
0376         {
0377             basic_expr that = {a0 , a1 , a2 , a3};
0378             return that;
0379         }
0380         
0381         
0382         typedef detail::not_a_valid_type address_of_hack_type_;
0383     };
0384     
0385     
0386     
0387     
0388     
0389     
0390     
0391     
0392     
0393     
0394     
0395     
0396     
0397     
0398     
0399     
0400     
0401     
0402     
0403     
0404     
0405     
0406     
0407     
0408     
0409     
0410     
0411     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4>
0412     struct basic_expr<Tag, list5<Arg0 , Arg1 , Arg2 , Arg3 , Arg4>, 5 >
0413     {
0414         typedef Tag proto_tag;
0415         static const long proto_arity_c = 5;
0416         typedef mpl::long_<5 > proto_arity;
0417         typedef basic_expr proto_base_expr;
0418         typedef list5<Arg0 , Arg1 , Arg2 , Arg3 , Arg4> proto_args;
0419         typedef basic_expr proto_grammar;
0420         typedef basic_default_domain proto_domain;
0421         typedef default_generator proto_generator;
0422         typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
0423         typedef basic_expr proto_derived_expr;
0424         typedef void proto_is_expr_; 
0425         typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4;
0426         typedef void proto_child5; typedef void proto_child6; typedef void proto_child7; typedef void proto_child8; typedef void proto_child9;
0427         
0428         
0429         BOOST_FORCEINLINE
0430         basic_expr const &proto_base() const
0431         {
0432             return *this;
0433         }
0434         
0435         
0436         BOOST_FORCEINLINE
0437         basic_expr &proto_base()
0438         {
0439             return *this;
0440         }
0441         
0442         
0443         
0444         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
0445         BOOST_FORCEINLINE
0446         static basic_expr const make(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4)
0447         {
0448             basic_expr that = {a0 , a1 , a2 , a3 , a4};
0449             return that;
0450         }
0451         
0452         
0453         typedef detail::not_a_valid_type address_of_hack_type_;
0454     };
0455     
0456     
0457     
0458     
0459     
0460     
0461     
0462     
0463     
0464     
0465     
0466     
0467     
0468     
0469     
0470     
0471     
0472     
0473     
0474     
0475     
0476     
0477     
0478     
0479     
0480     
0481     
0482     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5>
0483     struct basic_expr<Tag, list6<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5>, 6 >
0484     {
0485         typedef Tag proto_tag;
0486         static const long proto_arity_c = 6;
0487         typedef mpl::long_<6 > proto_arity;
0488         typedef basic_expr proto_base_expr;
0489         typedef list6<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5> proto_args;
0490         typedef basic_expr proto_grammar;
0491         typedef basic_default_domain proto_domain;
0492         typedef default_generator proto_generator;
0493         typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
0494         typedef basic_expr proto_derived_expr;
0495         typedef void proto_is_expr_; 
0496         typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5;
0497         typedef void proto_child6; typedef void proto_child7; typedef void proto_child8; typedef void proto_child9;
0498         
0499         
0500         BOOST_FORCEINLINE
0501         basic_expr const &proto_base() const
0502         {
0503             return *this;
0504         }
0505         
0506         
0507         BOOST_FORCEINLINE
0508         basic_expr &proto_base()
0509         {
0510             return *this;
0511         }
0512         
0513         
0514         
0515         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
0516         BOOST_FORCEINLINE
0517         static basic_expr const make(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5)
0518         {
0519             basic_expr that = {a0 , a1 , a2 , a3 , a4 , a5};
0520             return that;
0521         }
0522         
0523         
0524         typedef detail::not_a_valid_type address_of_hack_type_;
0525     };
0526     
0527     
0528     
0529     
0530     
0531     
0532     
0533     
0534     
0535     
0536     
0537     
0538     
0539     
0540     
0541     
0542     
0543     
0544     
0545     
0546     
0547     
0548     
0549     
0550     
0551     
0552     
0553     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6>
0554     struct basic_expr<Tag, list7<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6>, 7 >
0555     {
0556         typedef Tag proto_tag;
0557         static const long proto_arity_c = 7;
0558         typedef mpl::long_<7 > proto_arity;
0559         typedef basic_expr proto_base_expr;
0560         typedef list7<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6> proto_args;
0561         typedef basic_expr proto_grammar;
0562         typedef basic_default_domain proto_domain;
0563         typedef default_generator proto_generator;
0564         typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
0565         typedef basic_expr proto_derived_expr;
0566         typedef void proto_is_expr_; 
0567         typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5; typedef Arg6 proto_child6; proto_child6 child6;
0568         typedef void proto_child7; typedef void proto_child8; typedef void proto_child9;
0569         
0570         
0571         BOOST_FORCEINLINE
0572         basic_expr const &proto_base() const
0573         {
0574             return *this;
0575         }
0576         
0577         
0578         BOOST_FORCEINLINE
0579         basic_expr &proto_base()
0580         {
0581             return *this;
0582         }
0583         
0584         
0585         
0586         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
0587         BOOST_FORCEINLINE
0588         static basic_expr const make(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6)
0589         {
0590             basic_expr that = {a0 , a1 , a2 , a3 , a4 , a5 , a6};
0591             return that;
0592         }
0593         
0594         
0595         typedef detail::not_a_valid_type address_of_hack_type_;
0596     };
0597     
0598     
0599     
0600     
0601     
0602     
0603     
0604     
0605     
0606     
0607     
0608     
0609     
0610     
0611     
0612     
0613     
0614     
0615     
0616     
0617     
0618     
0619     
0620     
0621     
0622     
0623     
0624     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 , typename Arg7>
0625     struct basic_expr<Tag, list8<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7>, 8 >
0626     {
0627         typedef Tag proto_tag;
0628         static const long proto_arity_c = 8;
0629         typedef mpl::long_<8 > proto_arity;
0630         typedef basic_expr proto_base_expr;
0631         typedef list8<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7> proto_args;
0632         typedef basic_expr proto_grammar;
0633         typedef basic_default_domain proto_domain;
0634         typedef default_generator proto_generator;
0635         typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
0636         typedef basic_expr proto_derived_expr;
0637         typedef void proto_is_expr_; 
0638         typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5; typedef Arg6 proto_child6; proto_child6 child6; typedef Arg7 proto_child7; proto_child7 child7;
0639         typedef void proto_child8; typedef void proto_child9;
0640         
0641         
0642         BOOST_FORCEINLINE
0643         basic_expr const &proto_base() const
0644         {
0645             return *this;
0646         }
0647         
0648         
0649         BOOST_FORCEINLINE
0650         basic_expr &proto_base()
0651         {
0652             return *this;
0653         }
0654         
0655         
0656         
0657         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
0658         BOOST_FORCEINLINE
0659         static basic_expr const make(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7)
0660         {
0661             basic_expr that = {a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7};
0662             return that;
0663         }
0664         
0665         
0666         typedef detail::not_a_valid_type address_of_hack_type_;
0667     };
0668     
0669     
0670     
0671     
0672     
0673     
0674     
0675     
0676     
0677     
0678     
0679     
0680     
0681     
0682     
0683     
0684     
0685     
0686     
0687     
0688     
0689     
0690     
0691     
0692     
0693     
0694     
0695     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 , typename Arg7 , typename Arg8>
0696     struct basic_expr<Tag, list9<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8>, 9 >
0697     {
0698         typedef Tag proto_tag;
0699         static const long proto_arity_c = 9;
0700         typedef mpl::long_<9 > proto_arity;
0701         typedef basic_expr proto_base_expr;
0702         typedef list9<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8> proto_args;
0703         typedef basic_expr proto_grammar;
0704         typedef basic_default_domain proto_domain;
0705         typedef default_generator proto_generator;
0706         typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
0707         typedef basic_expr proto_derived_expr;
0708         typedef void proto_is_expr_; 
0709         typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5; typedef Arg6 proto_child6; proto_child6 child6; typedef Arg7 proto_child7; proto_child7 child7; typedef Arg8 proto_child8; proto_child8 child8;
0710         typedef void proto_child9;
0711         
0712         
0713         BOOST_FORCEINLINE
0714         basic_expr const &proto_base() const
0715         {
0716             return *this;
0717         }
0718         
0719         
0720         BOOST_FORCEINLINE
0721         basic_expr &proto_base()
0722         {
0723             return *this;
0724         }
0725         
0726         
0727         
0728         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
0729         BOOST_FORCEINLINE
0730         static basic_expr const make(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7 , A8 const &a8)
0731         {
0732             basic_expr that = {a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8};
0733             return that;
0734         }
0735         
0736         
0737         typedef detail::not_a_valid_type address_of_hack_type_;
0738     };
0739     
0740     
0741     
0742     
0743     
0744     
0745     
0746     
0747     
0748     
0749     
0750     
0751     
0752     
0753     
0754     
0755     
0756     
0757     
0758     
0759     
0760     
0761     
0762     
0763     
0764     
0765     
0766     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 , typename Arg7 , typename Arg8 , typename Arg9>
0767     struct basic_expr<Tag, list10<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8 , Arg9>, 10 >
0768     {
0769         typedef Tag proto_tag;
0770         static const long proto_arity_c = 10;
0771         typedef mpl::long_<10 > proto_arity;
0772         typedef basic_expr proto_base_expr;
0773         typedef list10<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8 , Arg9> proto_args;
0774         typedef basic_expr proto_grammar;
0775         typedef basic_default_domain proto_domain;
0776         typedef default_generator proto_generator;
0777         typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
0778         typedef basic_expr proto_derived_expr;
0779         typedef void proto_is_expr_; 
0780         typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5; typedef Arg6 proto_child6; proto_child6 child6; typedef Arg7 proto_child7; proto_child7 child7; typedef Arg8 proto_child8; proto_child8 child8; typedef Arg9 proto_child9; proto_child9 child9;
0781         
0782         
0783         
0784         BOOST_FORCEINLINE
0785         basic_expr const &proto_base() const
0786         {
0787             return *this;
0788         }
0789         
0790         
0791         BOOST_FORCEINLINE
0792         basic_expr &proto_base()
0793         {
0794             return *this;
0795         }
0796         
0797         
0798         
0799         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
0800         BOOST_FORCEINLINE
0801         static basic_expr const make(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7 , A8 const &a8 , A9 const &a9)
0802         {
0803             basic_expr that = {a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9};
0804             return that;
0805         }
0806         
0807         
0808         typedef detail::not_a_valid_type address_of_hack_type_;
0809     };