Update of /cvsroot/boost/boost/boost/xpressive/proto
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv7821

Modified Files:
        domain.hpp expr.hpp extends.hpp fusion.hpp literal.hpp 
        matches.hpp operators.hpp proto_fwd.hpp ref.hpp traits.hpp 
Log Message:
get more stuff out of the proto namespace

Index: domain.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/xpressive/proto/domain.hpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- domain.hpp  6 Jul 2007 02:55:54 -0000       1.8
+++ domain.hpp  6 Jul 2007 08:54:43 -0000       1.9
@@ -50,28 +50,30 @@
         {};
     }
 
-    template<typename T, typename EnableIf>
-    struct is_domain
-      : mpl::false_
-    {};
-
-    template<typename T>
-    struct is_domain<T, typename T::proto_is_domain_>
-      : mpl::true_
-    {};
-
-    template<typename T, typename EnableIf>
-    struct domain_of
+    namespace result_of
     {
-        typedef default_domain type;
-    };
+        template<typename T, typename EnableIf>
+        struct is_domain
+          : mpl::false_
+        {};
 
-    template<typename T>
-    struct domain_of<T, typename T::proto_is_expr_>
-    {
-        typedef typename T::proto_domain type;
-    };
+        template<typename T>
+        struct is_domain<T, typename T::proto_is_domain_>
+          : mpl::true_
+        {};
+
+        template<typename T, typename EnableIf>
+        struct domain_of
+        {
+            typedef default_domain type;
+        };
 
+        template<typename T>
+        struct domain_of<T, typename T::proto_is_expr_>
+        {
+            typedef typename T::proto_domain type;
+        };
+    }
 }}
 
 #endif

Index: expr.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/xpressive/proto/expr.hpp,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -d -r1.38 -r1.39
--- expr.hpp    26 Jun 2007 17:03:00 -0000      1.38
+++ expr.hpp    6 Jul 2007 08:54:43 -0000       1.39
@@ -108,7 +108,7 @@
         #include BOOST_PP_ITERATE()
         }
 
-        namespace ops
+        namespace exprns_
         {
     #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, BOOST_PROTO_MAX_ARITY, 
<boost/xpressive/proto/expr.hpp>))
     #include BOOST_PP_ITERATE()
@@ -158,7 +158,7 @@
             typedef expr proto_base_expr;
             typedef Args proto_args;
             typedef default_domain proto_domain;
-            typedef proto_expr_tag fusion_tag;
+            typedef tag::proto_expr fusion_tag;
             typedef void proto_is_expr_;
             typedef expr proto_derived_expr;
 

Index: extends.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/xpressive/proto/extends.hpp,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -d -r1.36 -r1.37
--- extends.hpp 26 Jun 2007 17:03:00 -0000      1.36
+++ extends.hpp 6 Jul 2007 08:54:43 -0000       1.37
@@ -104,7 +104,7 @@
         typedef typename Expr::proto_args proto_args;\
         typedef typename Expr::proto_arity proto_arity;\
         typedef void proto_is_expr_;\
-        typedef boost::proto::proto_expr_tag fusion_tag;\
+        typedef boost::proto::tag::proto_expr fusion_tag;\
         \
         BOOST_PROTO_IDENTITY_TRANSFORM();\
         BOOST_PP_REPEAT(BOOST_PROTO_MAX_ARITY, BOOST_PROTO_EXTENDS_ARG, Expr)\
@@ -219,7 +219,7 @@
         BOOST_PP_REPEAT_FROM_TO(0, BOOST_PP_DEC(BOOST_PROTO_MAX_ARITY), 
BOOST_PROTO_DEFINE_FUN_OP, (Expr, Derived, Domain))\
         /**/
 
-    namespace ops
+    namespace exprns_
     {
         /// \brief Empty type to be used as a dummy template parameter of
         ///     POD expression wrappers. It allows argument-dependent lookup
@@ -325,7 +325,7 @@
         #include BOOST_PP_LOCAL_ITERATE()
         };
 
-    } // namespace ops
+    } // namespace exprns_
 
 }}
 

Index: fusion.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/xpressive/proto/fusion.hpp,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -d -r1.31 -r1.32
--- fusion.hpp  16 Jun 2007 05:46:16 -0000      1.31
+++ fusion.hpp  6 Jul 2007 08:54:43 -0000       1.32
@@ -49,7 +49,7 @@
             typedef Expr expr_type;
             typedef mpl::long_<Pos> index;
             typedef fusion::forward_traversal_tag category;
-            typedef proto_ref_iterator_tag fusion_tag;
+            typedef tag::proto_ref_iterator fusion_tag;
 
             ref_iterator(Expr const &expr)
               : expr_(expr)
@@ -112,7 +112,7 @@
         struct is_view_impl;
 
         template<>
-        struct is_view_impl<proto::proto_ref_tag>
+        struct is_view_impl<proto::tag::proto_ref>
         {
             template<typename Iterator>
             struct apply
@@ -121,7 +121,7 @@
         };
 
         template<>
-        struct is_view_impl<proto::proto_expr_tag>
+        struct is_view_impl<proto::tag::proto_expr>
         {
             template<typename Iterator>
             struct apply
@@ -133,7 +133,7 @@
         struct value_of_impl;
 
         template<>
-        struct value_of_impl<proto::proto_ref_iterator_tag>
+        struct value_of_impl<proto::tag::proto_ref_iterator>
         {
             template<typename Iterator>
             struct apply
@@ -145,7 +145,7 @@
         struct deref_impl;
 
         template<>
-        struct deref_impl<proto::proto_ref_iterator_tag>
+        struct deref_impl<proto::tag::proto_ref_iterator>
         {
             template<typename Iterator>
             struct apply
@@ -166,7 +166,7 @@
         struct advance_impl;
 
         template<>
-        struct advance_impl<proto::proto_ref_iterator_tag>
+        struct advance_impl<proto::tag::proto_ref_iterator>
         {
             template<typename Iterator, typename N>
             struct apply
@@ -187,7 +187,7 @@
         struct distance_impl;
 
         template<>
-        struct distance_impl<proto::proto_ref_iterator_tag>
+        struct distance_impl<proto::tag::proto_ref_iterator>
         {
             template<typename IteratorFrom, typename IteratorTo>
             struct apply
@@ -199,11 +199,11 @@
         struct next_impl;
 
         template<>
-        struct next_impl<proto::proto_ref_iterator_tag>
+        struct next_impl<proto::tag::proto_ref_iterator>
         {
             template<typename Iterator>
             struct apply
-              : advance_impl<proto::proto_ref_iterator_tag>::template 
apply<Iterator, mpl::long_<1> >
+              : advance_impl<proto::tag::proto_ref_iterator>::template 
apply<Iterator, mpl::long_<1> >
             {};
         };
 
@@ -211,11 +211,11 @@
         struct prior_impl;
 
         template<>
-        struct prior_impl<proto::proto_ref_iterator_tag>
+        struct prior_impl<proto::tag::proto_ref_iterator>
         {
             template<typename Iterator>
             struct apply
-              : advance_impl<proto::proto_ref_iterator_tag>::template 
apply<Iterator, mpl::long_<-1> >
+              : advance_impl<proto::tag::proto_ref_iterator>::template 
apply<Iterator, mpl::long_<-1> >
             {};
         };
 
@@ -223,7 +223,7 @@
         struct category_of_impl;
 
         template<>
-        struct category_of_impl<proto::proto_ref_tag>
+        struct category_of_impl<proto::tag::proto_ref>
         {
             template<typename Sequence>
             struct apply
@@ -236,7 +236,7 @@
         struct size_impl;
 
         template<>
-        struct size_impl<proto::proto_ref_tag>
+        struct size_impl<proto::tag::proto_ref>
         {
             template<typename Sequence>
             struct apply
@@ -248,7 +248,7 @@
         struct begin_impl;
 
         template<>
-        struct begin_impl<proto::proto_ref_tag>
+        struct begin_impl<proto::tag::proto_ref>
         {
             template<typename Sequence>
             struct apply
@@ -266,7 +266,7 @@
         struct end_impl;
 
         template<>
-        struct end_impl<proto::proto_ref_tag>
+        struct end_impl<proto::tag::proto_ref>
         {
             template<typename Sequence>
             struct apply
@@ -284,7 +284,7 @@
         struct value_at_impl;
 
         template<>
-        struct value_at_impl<proto::proto_ref_tag>
+        struct value_at_impl<proto::tag::proto_ref>
         {
             template<typename Sequence, typename N>
             struct apply
@@ -297,7 +297,7 @@
         struct at_impl;
 
         template<>
-        struct at_impl<proto::proto_ref_tag>
+        struct at_impl<proto::tag::proto_ref>
         {
             template<typename Sequence, typename N>
             struct apply
@@ -315,7 +315,7 @@
         struct is_segmented_impl;
 
         template<>
-        struct is_segmented_impl<proto::proto_expr_tag>
+        struct is_segmented_impl<proto::tag::proto_expr>
         {
             template<typename Iterator>
             struct apply
@@ -350,7 +350,7 @@
         struct segments_impl;
 
         template<>
-        struct segments_impl<proto::proto_expr_tag>
+        struct segments_impl<proto::tag::proto_expr>
         {
             template<typename Sequence>
             struct apply
@@ -371,7 +371,7 @@
         };
 
         template<>
-        struct category_of_impl<proto::proto_expr_tag>
+        struct category_of_impl<proto::tag::proto_expr>
         {
             template<typename Sequence>
             struct apply
@@ -381,7 +381,7 @@
         };
 
         template<>
-        struct begin_impl<proto::proto_expr_tag>
+        struct begin_impl<proto::tag::proto_expr>
         {
             template<typename Sequence>
             struct apply
@@ -390,7 +390,7 @@
         };
 
         template<>
-        struct end_impl<proto::proto_expr_tag>
+        struct end_impl<proto::tag::proto_expr>
         {
             template<typename Sequence>
             struct apply
@@ -399,7 +399,7 @@
         };
 
         template<>
-        struct size_impl<proto::proto_expr_tag>
+        struct size_impl<proto::tag::proto_expr>
         {
             template<typename Sequence>
             struct apply
@@ -412,7 +412,7 @@
 //namespace boost { namespace mpl
 //{
     //template<>
-    //struct begin_impl<proto::proto_expr_tag>
+    //struct begin_impl<proto::tag::proto_expr>
     //{
     //    template<typename Sequence>
     //    struct apply
@@ -422,7 +422,7 @@
     //};
 
     //template<>
-    //struct end_impl<proto::proto_expr_tag>
+    //struct end_impl<proto::tag::proto_expr>
     //{
     //    template<typename Sequence>
     //    struct apply
@@ -432,7 +432,7 @@
     //};
 
     //template<>
-    //struct size_impl<proto::proto_expr_tag>
+    //struct size_impl<proto::tag::proto_expr>
     //{
     //    template<typename Sequence>
     //    struct apply
@@ -442,7 +442,7 @@
     //};
 
     //template<>
-    //struct at_impl<proto::proto_expr_tag>
+    //struct at_impl<proto::tag::proto_expr>
     //{
     //    template<typename Sequence, typename N>
     //    struct apply
@@ -453,7 +453,7 @@
 
 
     //template<>
-    //struct begin_impl<proto::proto_ref_tag>
+    //struct begin_impl<proto::tag::proto_ref>
     //{
     //    template<typename Sequence>
     //    struct apply
@@ -463,7 +463,7 @@
     //};
 
     //template<>
-    //struct end_impl<proto::proto_ref_tag>
+    //struct end_impl<proto::tag::proto_ref>
     //{
     //    template<typename Sequence>
     //    struct apply
@@ -473,7 +473,7 @@
     //};
 
     //template<>
-    //struct size_impl<proto::proto_ref_tag>
+    //struct size_impl<proto::tag::proto_ref>
     //{
     //    template<typename Sequence>
     //    struct apply
@@ -483,7 +483,7 @@
     //};
 
     //template<>
-    //struct at_impl<proto::proto_ref_tag>
+    //struct at_impl<proto::tag::proto_ref>
     //{
     //    template<typename Sequence, typename N>
     //    struct apply
@@ -500,17 +500,17 @@
 //    template<typename Tag, typename Args, long Arity>
 //    struct sequence_tag<proto::expr<Tag, Args, Arity> >
 //    {
-//        typedef proto::proto_expr_tag type;
+//        typedef proto::tag::proto_expr type;
 //    };
 //
 //    template<typename Expr>
 //    struct sequence_tag<proto::ref_<Expr> >
 //    {
-//        typedef proto::proto_expr_tag type;
+//        typedef proto::tag::proto_expr type;
 //    };
 //
 //    template<>
-//    struct begin_impl<proto::proto_expr_tag>
+//    struct begin_impl<proto::tag::proto_expr>
 //    {
 //        template<typename Sequence>
 //        struct apply
@@ -520,7 +520,7 @@
 //    };
 //
 //    template<>
-//    struct end_impl<proto::proto_expr_tag>
+//    struct end_impl<proto::tag::proto_expr>
 //    {
 //        template<typename Sequence>
 //        struct apply
@@ -530,7 +530,7 @@
 //    };
 //
 //    template<>
-//    struct size_impl<proto::proto_expr_tag>
+//    struct size_impl<proto::tag::proto_expr>
 //    {
 //        template<typename Sequence>
 //        struct apply
@@ -540,7 +540,7 @@
 //    };
 //
 //    template<>
-//    struct at_impl<proto::proto_expr_tag>
+//    struct at_impl<proto::tag::proto_expr>
 //    {
 //        template<typename Sequence, typename N>
 //        struct apply

Index: literal.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/xpressive/proto/literal.hpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- literal.hpp 12 Apr 2007 23:44:41 -0000      1.8
+++ literal.hpp 6 Jul 2007 08:54:43 -0000       1.9
@@ -19,30 +19,33 @@
 
 namespace boost { namespace proto
 {
-    template<typename T, typename Domain>
-    struct literal
-      : extends<typename terminal<T>::type, literal<T, Domain>, Domain>
+    namespace utility
     {
-        typedef typename terminal<T>::type terminal_type;
-        typedef extends<terminal_type, literal<T, Domain>, Domain> base_type;
+        template<typename T, typename Domain>
+        struct literal
+          : extends<typename terminal<T>::type, literal<T, Domain>, Domain>
+        {
+            typedef typename terminal<T>::type terminal_type;
+            typedef extends<terminal_type, literal<T, Domain>, Domain> 
base_type;
 
-        template<typename U>
-        literal(U &u)
-          : base_type(terminal_type::make(u))
-        {}
+            template<typename U>
+            literal(U &u)
+              : base_type(terminal_type::make(u))
+            {}
 
-        template<typename U>
-        literal(U const &u)
-          : base_type(terminal_type::make(u))
-        {}
+            template<typename U>
+            literal(U const &u)
+              : base_type(terminal_type::make(u))
+            {}
 
-        template<typename U>
-        literal(literal<U, Domain> const &u)
-          : base_type(terminal_type::make(proto::arg(u)))
-        {}
+            template<typename U>
+            literal(literal<U, Domain> const &u)
+              : base_type(terminal_type::make(proto::arg(u)))
+            {}
 
-        using base_type::operator =;
-    };
+            using base_type::operator =;
+        };
+    }
 
     /// lit
     ///
@@ -57,14 +60,16 @@
     template<typename T>
     inline literal<T const &> lit(T const &t)
     {
-#ifdef _MSC_VER
-#pragma warning(push)
-#pragma warning(disable: 4180) // warning C4180: qualifier applied to function 
type has no meaning; ignored
-#endif
+        #ifdef _MSC_VER
+        #pragma warning(push)
+        #pragma warning(disable: 4180) // warning C4180: qualifier applied to 
function type has no meaning; ignored
+        #endif
+
         return literal<T const &>(t);
-#ifdef _MSC_VER
-#pragma warning(pop)
-#endif
+
+        #ifdef _MSC_VER
+        #pragma warning(pop)
+        #endif
     }
 
 }}

Index: matches.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/xpressive/proto/matches.hpp,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -d -r1.53 -r1.54
--- matches.hpp 4 Jul 2007 21:40:16 -0000       1.53
+++ matches.hpp 6 Jul 2007 08:54:43 -0000       1.54
@@ -339,25 +339,13 @@
             {};
         }
 
-        template<typename Expr, typename Grammar>
-        struct matches
-          : detail::matches_impl<typename Expr::proto_base_expr, typename 
Grammar::proto_base_expr>
-        {};
-
-        template<typename Grammar>
-        struct vararg
-          : Grammar
+        namespace result_of
         {
-            typedef void proto_is_vararg_;
-        };
-
-        template<typename T>
-        struct exact
-        {};
-
-        template<typename T>
-        struct convertible_to
-        {};
+            template<typename Expr, typename Grammar>
+            struct matches
+              : detail::matches_impl<typename Expr::proto_base_expr, typename 
Grammar::proto_base_expr>
+            {};
+        }
 
         namespace wildcardns_
         {
@@ -465,6 +453,21 @@
                     return Cases::template case_<typename 
Expr::proto_tag>::call(expr, state, visitor);
                 }
             };
+
+            template<typename T>
+            struct exact
+            {};
+
+            template<typename T>
+            struct convertible_to
+            {};
+
+            template<typename Grammar>
+            struct vararg
+              : Grammar
+            {
+                typedef void proto_is_vararg_;
+            };
         }
     }}
 

Index: operators.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/xpressive/proto/operators.hpp,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -d -r1.37 -r1.38
--- operators.hpp       29 Jun 2007 07:49:33 -0000      1.37
+++ operators.hpp       6 Jul 2007 08:54:43 -0000       1.38
@@ -226,7 +226,7 @@
     }                                                                          
                     \
     /**/
 
-    namespace ops
+    namespace exprns_
     {
         BOOST_PROTO_DEFINE_UNARY_OPERATOR(+, tag::posit, 0)
         BOOST_PROTO_DEFINE_UNARY_OPERATOR(-, tag::negate, 0)
@@ -270,17 +270,19 @@
         BOOST_PROTO_DEFINE_BINARY_OPERATOR(&=, tag::bitwise_and_assign)
         BOOST_PROTO_DEFINE_BINARY_OPERATOR(|=, tag::bitwise_or_assign)
         BOOST_PROTO_DEFINE_BINARY_OPERATOR(^=, tag::bitwise_xor_assign)
-    }
 
-    /// if_else
-    ///
-    BOOST_PROTO_DEFINE_FUNCTION_TEMPLATE(
-        3
-      , if_else
-      , deduce_domain
-      , (tag::if_else_)
-      , BOOST_PP_SEQ_NIL
-    )
+        /// if_else
+        ///
+        BOOST_PROTO_DEFINE_FUNCTION_TEMPLATE(
+            3
+          , if_else
+          , deduce_domain
+          , (tag::if_else_)
+          , BOOST_PP_SEQ_NIL
+        )
+    } // exprns_
+
+    using exprns_::if_else;
 
 #undef BOOST_PROTO_DEFINE_UNARY_OPERATOR
 #undef BOOST_PROTO_DEFINE_BINARY_OPERATOR
@@ -391,13 +393,13 @@
       : mpl::false_
     {};
 
-#ifndef BOOST_PROTO_DOXYGEN_INVOKED
+    #ifndef BOOST_PROTO_DOXYGEN_INVOKED
     namespace exops
     {
         BOOST_PROTO_DEFINE_OPERATORS(is_extension, default_domain)
         using proto::if_else;
     }
-#endif
+    #endif
 
 }}
 

Index: proto_fwd.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/xpressive/proto/proto_fwd.hpp,v
retrieving revision 1.85
retrieving revision 1.86
diff -u -d -r1.85 -r1.86
--- proto_fwd.hpp       6 Jul 2007 02:55:54 -0000       1.85
+++ proto_fwd.hpp       6 Jul 2007 08:54:43 -0000       1.86
@@ -114,6 +114,11 @@
         struct subscript;
         struct if_else_;
         struct function;
+
+        // Fusion tags
+        struct proto_expr;
+        struct proto_ref;
+        struct proto_ref_iterator;
     }
 
     namespace wildcardns_
@@ -152,7 +157,7 @@
     using domainns_::default_domain;
     using domainns_::deduce_domain;
 
-    namespace ops
+    namespace exprns_
     {
         template<typename Tag, typename Args, long Arity = Args::size>
         struct expr;
@@ -168,11 +173,9 @@
         struct is_proto_expr;
     }
 
-    using ops::expr;
-
-    using ops::extends;
-
-    using ops::is_proto_expr;
+    using exprns_::expr;
+    using exprns_::extends;
+    using exprns_::is_proto_expr;
 
     namespace refns_
     {
@@ -182,15 +185,6 @@
 
     using refns_::ref_;
 
-    template<typename Expr, typename Grammar>
-    struct matches;
-
-    template<typename T>
-    struct exact;
-
-    template<typename T>
-    struct convertible_to;
-
     namespace control
     {
         template<
@@ -215,6 +209,17 @@
 
         template<typename Grammar>
         struct not_;
+
+        template<typename T>
+        struct exact;
+
+        template<typename T>
+        struct convertible_to;
+
+        template<typename Grammar>
+        struct vararg;
+
+        int const N = INT_MAX;
     }
 
     using control::if_;
@@ -222,27 +227,44 @@
     using control::and_;
     using control::not_;
     using control::switch_;
+    using control::exact;
+    using control::convertible_to;
+    using control::vararg;
+    using control::N;
 
-    struct proto_expr_tag;
-    struct proto_ref_tag;
-    struct proto_ref_iterator_tag;
+    namespace context
+    {
+        struct null_context;
 
-    struct default_context;
+        template<typename Expr, typename Context, long Arity = 
Expr::proto_arity::value>
+        struct null_eval;
 
-    template<typename Derived, typename DefaultCtx = default_context>
-    struct callable_context;
+        struct default_context;
 
-    template<typename T, typename Domain = default_domain>
-    struct literal;
+        template<typename Expr, typename Context, typename Tag = typename 
Expr::proto_tag, long Arity = Expr::proto_arity::value>
+        struct default_eval;
 
-    template<typename T, typename EnableIf = void>
-    struct is_ref;
+        template<typename Derived, typename DefaultCtx = default_context>
+        struct callable_context;
 
-    template<typename T, typename EnableIf = void>
-    struct is_expr;
+        template<typename Expr, typename Context, long Arity = 
Expr::proto_arity::value>
+        struct callable_eval;
+    }
 
-    template<typename T, typename EnableIf = void>
-    struct is_domain;
+    using context::null_context;
+    using context::null_eval;
+    using context::default_context;
+    using context::default_eval;
+    using context::callable_context;
+    using context::callable_eval;
+
+    namespace utility
+    {
+        template<typename T, typename Domain = default_domain>
+        struct literal;
+    }
+
+    using utility::literal;
 
     namespace result_of
     {
@@ -287,77 +309,102 @@
 
         template<typename Tag, typename DomainOrSequence, typename 
SequenceOrVoid = void, typename _ = void>
         struct unpack_expr;
-    }
 
-    template<typename Expr>
-    struct tag_of;
+        template<typename T, typename EnableIf = void>
+        struct is_ref;
 
-    template<typename T, typename EnableIf = void>
-    struct domain_of;
+        template<typename T, typename EnableIf = void>
+        struct is_expr;
 
-    template<typename Expr>
-    struct id;
+        template<typename T, typename EnableIf = void>
+        struct is_domain;
 
-    // Generic expression generators
-    template<typename Tag, typename Arg>
-    struct unary_expr;
+        template<typename Expr>
+        struct tag_of;
 
-    template<typename Tag, typename Left, typename Right>
-    struct binary_expr;
+        template<typename T, typename EnableIf = void>
+        struct domain_of;
 
-    template<typename Tag, 
BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(BOOST_PROTO_MAX_ARITY, typename A, void), 
typename Dummy = void>
-    struct nary_expr;
+        template<typename Expr>
+        struct id;
 
-    // Specific expression generators, for convenience
-    template<typename T> struct terminal;
-    template<typename T> struct posit;
-    template<typename T> struct negate;
-    template<typename T> struct dereference;
-    template<typename T> struct complement;
-    template<typename T> struct address_of;
-    template<typename T> struct logical_not;
-    template<typename T> struct pre_inc;
-    template<typename T> struct pre_dec;
-    template<typename T> struct post_inc;
-    template<typename T> struct post_dec;
+        template<typename Expr, typename Grammar>
+        struct matches;
+    }
 
-    template<typename T, typename U> struct shift_left;
-    template<typename T, typename U> struct shift_right;
-    template<typename T, typename U> struct multiplies;
-    template<typename T, typename U> struct divides;
-    template<typename T, typename U> struct modulus;
-    template<typename T, typename U> struct plus;
-    template<typename T, typename U> struct minus;
-    template<typename T, typename U> struct less;
-    template<typename T, typename U> struct greater;
-    template<typename T, typename U> struct less_equal;
-    template<typename T, typename U> struct greater_equal;
-    template<typename T, typename U> struct equal_to;
-    template<typename T, typename U> struct not_equal_to;
-    template<typename T, typename U> struct logical_or;
-    template<typename T, typename U> struct logical_and;
-    template<typename T, typename U> struct bitwise_and;
-    template<typename T, typename U> struct bitwise_or;
-    template<typename T, typename U> struct bitwise_xor;
-    template<typename T, typename U> struct comma;
-    template<typename T, typename U> struct mem_ptr;
+    using proto::result_of::is_ref;
+    using proto::result_of::is_expr;
+    using proto::result_of::is_domain;
+    using proto::result_of::tag_of;
+    using proto::result_of::domain_of;
+    using proto::result_of::id;
+    using proto::result_of::matches;
 
-    template<typename T, typename U> struct assign;
-    template<typename T, typename U> struct shift_left_assign;
-    template<typename T, typename U> struct shift_right_assign;
-    template<typename T, typename U> struct multilpies_assign;
-    template<typename T, typename U> struct divides_assign;
-    template<typename T, typename U> struct modulus_assign;
-    template<typename T, typename U> struct plus_assign;
-    template<typename T, typename U> struct minus_assign;
-    template<typename T, typename U> struct bitwise_and_assign;
-    template<typename T, typename U> struct bitwise_or_assign;
-    template<typename T, typename U> struct bitwise_xor_assign;
-    template<typename T, typename U> struct subscript;
-    template<typename T, typename U, typename V> struct if_else_;
+    namespace op
+    {
+        // Generic expression generators
+        template<typename Tag, typename Arg>
+        struct unary_expr;
 
-    template<BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(BOOST_PROTO_MAX_ARITY, 
typename A, void), typename Dummy = void>
-    struct function;
+        template<typename Tag, typename Left, typename Right>
+        struct binary_expr;
+
+        template<typename Tag, 
BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(BOOST_PROTO_MAX_ARITY, typename A, void), 
typename Dummy = void>
+        struct nary_expr;
+
+        // Specific expression generators, for convenience
+        template<typename T> struct terminal;
+        template<typename T> struct posit;
+        template<typename T> struct negate;
+        template<typename T> struct dereference;
+        template<typename T> struct complement;
+        template<typename T> struct address_of;
+        template<typename T> struct logical_not;
+        template<typename T> struct pre_inc;
+        template<typename T> struct pre_dec;
+        template<typename T> struct post_inc;
+        template<typename T> struct post_dec;
+
+        template<typename T, typename U> struct shift_left;
+        template<typename T, typename U> struct shift_right;
+        template<typename T, typename U> struct multiplies;
+        template<typename T, typename U> struct divides;
+        template<typename T, typename U> struct modulus;
+        template<typename T, typename U> struct plus;
+        template<typename T, typename U> struct minus;
+        template<typename T, typename U> struct less;
+        template<typename T, typename U> struct greater;
+        template<typename T, typename U> struct less_equal;
+        template<typename T, typename U> struct greater_equal;
+        template<typename T, typename U> struct equal_to;
+        template<typename T, typename U> struct not_equal_to;
+        template<typename T, typename U> struct logical_or;
+        template<typename T, typename U> struct logical_and;
+        template<typename T, typename U> struct bitwise_and;
+        template<typename T, typename U> struct bitwise_or;
+        template<typename T, typename U> struct bitwise_xor;
+        template<typename T, typename U> struct comma;
+        template<typename T, typename U> struct mem_ptr;
+
+        template<typename T, typename U> struct assign;
+        template<typename T, typename U> struct shift_left_assign;
+        template<typename T, typename U> struct shift_right_assign;
+        template<typename T, typename U> struct multilpies_assign;
+        template<typename T, typename U> struct divides_assign;
+        template<typename T, typename U> struct modulus_assign;
+        template<typename T, typename U> struct plus_assign;
+        template<typename T, typename U> struct minus_assign;
+        template<typename T, typename U> struct bitwise_and_assign;
+        template<typename T, typename U> struct bitwise_or_assign;
+        template<typename T, typename U> struct bitwise_xor_assign;
+        template<typename T, typename U> struct subscript;
+        template<typename T, typename U, typename V> struct if_else_;
+
+        template<BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(BOOST_PROTO_MAX_ARITY, 
typename A, void), typename Dummy = void>
+        struct function;
+    }
+
+    using namespace op;
 
     namespace functional
     {
@@ -392,6 +439,18 @@
         struct unfused_expr;
     }
 
+#define BOOST_PROTO_IDENTITY_TRANSFORM()\
+    template<typename Expr_, typename State_, typename Visitor_>\
+    static Expr_ const &call(Expr_ const &expr_, State_ const &, Visitor_ &)\
+    {\
+        return expr_;\
+    }\
+    template<typename Expr_, typename, typename>\
+    struct apply\
+    {\
+        typedef Expr_ type;\
+    }
+
     namespace transform
     {
         namespace detail
@@ -477,35 +536,19 @@
         struct construct;
     }
 
-#define BOOST_PROTO_IDENTITY_TRANSFORM()\
-    template<typename Expr_, typename State_, typename Visitor_>\
-    static Expr_ const &call(Expr_ const &expr_, State_ const &, Visitor_ &)\
-    {\
-        return expr_;\
-    }\
-    template<typename Expr_, typename, typename>\
-    struct apply\
-    {\
-        typedef Expr_ type;\
-    }
-
-    namespace identitytfxns_
+    namespace has_transformns_
     {
+        template<typename Grammar>
+        struct has_pass_through_transform;
+
         struct has_identity_transform
         {
             BOOST_PROTO_IDENTITY_TRANSFORM();
         };
     }
 
-    using identitytfxns_::has_identity_transform;
-
-    template<typename Grammar>
-    struct has_pass_through_transform;
-
-    template<typename Grammar>
-    struct vararg;
-
-    int const N = INT_MAX;
+    using has_transformns_::has_identity_transform;
+    using has_transformns_::has_pass_through_transform;
 
     template<typename T>
     struct is_extension;

Index: ref.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/xpressive/proto/ref.hpp,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -d -r1.30 -r1.31
--- ref.hpp     4 Jul 2007 21:40:17 -0000       1.30
+++ ref.hpp     6 Jul 2007 08:54:43 -0000       1.31
@@ -36,7 +36,7 @@
             typedef typename Expr::proto_args proto_args;
             typedef typename Expr::proto_arity proto_arity;
             typedef typename Expr::proto_domain proto_domain;
-            typedef proto_ref_tag fusion_tag;
+            typedef tag::proto_ref fusion_tag;
             typedef void proto_is_ref_;
             typedef void proto_is_expr_;
             typedef Expr proto_derived_expr;

Index: traits.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/xpressive/proto/traits.hpp,v
retrieving revision 1.62
retrieving revision 1.63
diff -u -d -r1.62 -r1.63
--- traits.hpp  2 Jul 2007 06:21:28 -0000       1.62
+++ traits.hpp  6 Jul 2007 08:54:43 -0000       1.63
@@ -57,30 +57,43 @@
     namespace boost { namespace proto
     {
 
-        // is_ref
-        template<typename T, typename EnableIf>
-        struct is_ref
-          : mpl::false_
-        {};
+        namespace result_of
+        {
+            // is_ref
+            template<typename T, typename EnableIf>
+            struct is_ref
+              : mpl::false_
+            {};
 
-        template<typename T>
-        struct is_ref<T, typename T::proto_is_ref_>
-          : mpl::true_
-        {};
+            template<typename T>
+            struct is_ref<T, typename T::proto_is_ref_>
+              : mpl::true_
+            {};
 
-        // is_expr
-        template<typename T, typename EnableIf>
-        struct is_expr
-          : mpl::false_
-        {};
+            // is_expr
+            template<typename T, typename EnableIf>
+            struct is_expr
+              : mpl::false_
+            {};
 
-        template<typename T>
-        struct is_expr<T, typename T::proto_is_expr_>
-          : mpl::true_
-        {};
+            template<typename T>
+            struct is_expr<T, typename T::proto_is_expr_>
+              : mpl::true_
+            {};
+
+            // tag_of
+            template<typename Expr>
+            struct tag_of
+            {
+                typedef typename Expr::proto_tag type;
+            };
+
+            // id
+            template<typename Expr>
+            struct id
+              : result_of::deep_copy<Expr>
+            {};
 
-        namespace result_of
-        {
             // as_expr
             template<typename T, typename Domain, typename EnableIf>
             struct as_expr
@@ -175,138 +188,129 @@
             {};
         }
 
-        // terminal
-        template<typename T>
-        struct terminal : has_identity_transform
-        {
-            terminal();
-            typedef expr<proto::tag::terminal, args0<T> > type;
-            typedef type proto_base_expr;
-            typedef proto::tag::terminal proto_tag;
-            typedef T proto_arg0;
-        };
-
-        // if_else
-        template<typename T, typename U, typename V>
-        struct if_else_ : has_pass_through_transform<if_else_<T, U, V> >
+        namespace op
         {
-            if_else_();
-            typedef expr<proto::tag::if_else_, args3<T, U, V> > type;
-            typedef type proto_base_expr;
-            typedef proto::tag::if_else_ proto_tag;
-            typedef T proto_arg0;
-            typedef U proto_arg1;
-            typedef V proto_arg2;
-        };
+            // terminal
+            template<typename T>
+            struct terminal : has_identity_transform
+            {
+                terminal();
+                typedef expr<proto::tag::terminal, args0<T> > type;
+                typedef type proto_base_expr;
+                typedef proto::tag::terminal proto_tag;
+                typedef T proto_arg0;
+            };
 
-        // unary_expr
-        template<typename Tag, typename T>
-        struct unary_expr : has_pass_through_transform<unary_expr<Tag, T> >
-        {
-            unary_expr();
-            typedef expr<Tag, args1<T> > type;
-            typedef type proto_base_expr;
-            typedef Tag proto_tag;
-            typedef T proto_arg0;
-        };
+            // if_else
+            template<typename T, typename U, typename V>
+            struct if_else_ : has_pass_through_transform<if_else_<T, U, V> >
+            {
+                if_else_();
+                typedef expr<proto::tag::if_else_, args3<T, U, V> > type;
+                typedef type proto_base_expr;
+                typedef proto::tag::if_else_ proto_tag;
+                typedef T proto_arg0;
+                typedef U proto_arg1;
+                typedef V proto_arg2;
+            };
 
-        // binary_expr
-        template<typename Tag, typename T, typename U>
-        struct binary_expr : has_pass_through_transform<binary_expr<Tag, T, U> 
>
-        {
-            binary_expr();
-            typedef expr<Tag, args2<T, U> > type;
-            typedef type proto_base_expr;
-            typedef Tag proto_tag;
-            typedef T proto_arg0;
-            typedef U proto_arg1;
-        };
+            // unary_expr
+            template<typename Tag, typename T>
+            struct unary_expr : has_pass_through_transform<unary_expr<Tag, T> >
+            {
+                unary_expr();
+                typedef expr<Tag, args1<T> > type;
+                typedef type proto_base_expr;
+                typedef Tag proto_tag;
+                typedef T proto_arg0;
+            };
 
-    #define BOOST_PROTO_UNARY_GENERATOR(Name)\
-        template<typename T>\
-        struct Name : has_pass_through_transform<Name<T> >\
-        {\
-            Name();\
-            typedef expr<proto::tag::Name, args1<T> > type;\
-            typedef type proto_base_expr;\
-            typedef proto::tag::Name proto_tag;\
-            typedef T proto_arg0;\
-        };\
-        /**/
+            // binary_expr
+            template<typename Tag, typename T, typename U>
+            struct binary_expr : has_pass_through_transform<binary_expr<Tag, 
T, U> >
+            {
+                binary_expr();
+                typedef expr<Tag, args2<T, U> > type;
+                typedef type proto_base_expr;
+                typedef Tag proto_tag;
+                typedef T proto_arg0;
+                typedef U proto_arg1;
+            };
 
-    #define BOOST_PROTO_BINARY_GENERATOR(Name)\
-        template<typename T, typename U>\
-        struct Name : has_pass_through_transform<Name<T, U> >\
-        {\
-            Name();\
-            typedef expr<proto::tag::Name, args2<T, U> > type;\
-            typedef type proto_base_expr;\
-            typedef proto::tag::Name proto_tag;\
-            typedef T proto_arg0;\
-            typedef U proto_arg1;\
-        };\
-        /**/
+        #define BOOST_PROTO_UNARY_GENERATOR(Name)\
+            template<typename T>\
+            struct Name : has_pass_through_transform<Name<T> >\
+            {\
+                Name();\
+                typedef expr<proto::tag::Name, args1<T> > type;\
+                typedef type proto_base_expr;\
+                typedef proto::tag::Name proto_tag;\
+                typedef T proto_arg0;\
+            };\
+            /**/
 
-        BOOST_PROTO_UNARY_GENERATOR(posit)
-        BOOST_PROTO_UNARY_GENERATOR(negate)
-        BOOST_PROTO_UNARY_GENERATOR(dereference)
-        BOOST_PROTO_UNARY_GENERATOR(complement)
-        BOOST_PROTO_UNARY_GENERATOR(address_of)
-        BOOST_PROTO_UNARY_GENERATOR(logical_not)
-        BOOST_PROTO_UNARY_GENERATOR(pre_inc)
-        BOOST_PROTO_UNARY_GENERATOR(pre_dec)
-        BOOST_PROTO_UNARY_GENERATOR(post_inc)
-        BOOST_PROTO_UNARY_GENERATOR(post_dec)
+        #define BOOST_PROTO_BINARY_GENERATOR(Name)\
+            template<typename T, typename U>\
+            struct Name : has_pass_through_transform<Name<T, U> >\
+            {\
+                Name();\
+                typedef expr<proto::tag::Name, args2<T, U> > type;\
+                typedef type proto_base_expr;\
+                typedef proto::tag::Name proto_tag;\
+                typedef T proto_arg0;\
+                typedef U proto_arg1;\
+            };\
+            /**/
 
-        BOOST_PROTO_BINARY_GENERATOR(shift_left)
-        BOOST_PROTO_BINARY_GENERATOR(shift_right)
-        BOOST_PROTO_BINARY_GENERATOR(multiplies)
-        BOOST_PROTO_BINARY_GENERATOR(divides)
-        BOOST_PROTO_BINARY_GENERATOR(modulus)
-        BOOST_PROTO_BINARY_GENERATOR(plus)
-        BOOST_PROTO_BINARY_GENERATOR(minus)
-        BOOST_PROTO_BINARY_GENERATOR(less)
-        BOOST_PROTO_BINARY_GENERATOR(greater)
-        BOOST_PROTO_BINARY_GENERATOR(less_equal)
-        BOOST_PROTO_BINARY_GENERATOR(greater_equal)
-        BOOST_PROTO_BINARY_GENERATOR(equal_to)
-        BOOST_PROTO_BINARY_GENERATOR(not_equal_to)
-        BOOST_PROTO_BINARY_GENERATOR(logical_or)
-        BOOST_PROTO_BINARY_GENERATOR(logical_and)
-        BOOST_PROTO_BINARY_GENERATOR(bitwise_and)
-        BOOST_PROTO_BINARY_GENERATOR(bitwise_or)
-        BOOST_PROTO_BINARY_GENERATOR(bitwise_xor)
-        BOOST_PROTO_BINARY_GENERATOR(comma)
-        BOOST_PROTO_BINARY_GENERATOR(mem_ptr)
+            BOOST_PROTO_UNARY_GENERATOR(posit)
+            BOOST_PROTO_UNARY_GENERATOR(negate)
+            BOOST_PROTO_UNARY_GENERATOR(dereference)
+            BOOST_PROTO_UNARY_GENERATOR(complement)
+            BOOST_PROTO_UNARY_GENERATOR(address_of)
+            BOOST_PROTO_UNARY_GENERATOR(logical_not)
+            BOOST_PROTO_UNARY_GENERATOR(pre_inc)
+            BOOST_PROTO_UNARY_GENERATOR(pre_dec)
+            BOOST_PROTO_UNARY_GENERATOR(post_inc)
+            BOOST_PROTO_UNARY_GENERATOR(post_dec)
 
-        BOOST_PROTO_BINARY_GENERATOR(assign)
-        BOOST_PROTO_BINARY_GENERATOR(shift_left_assign)
-        BOOST_PROTO_BINARY_GENERATOR(shift_right_assign)
-        BOOST_PROTO_BINARY_GENERATOR(multilpies_assign)
-        BOOST_PROTO_BINARY_GENERATOR(divides_assign)
-        BOOST_PROTO_BINARY_GENERATOR(modulus_assign)
-        BOOST_PROTO_BINARY_GENERATOR(plus_assign)
-        BOOST_PROTO_BINARY_GENERATOR(minus_assign)
-        BOOST_PROTO_BINARY_GENERATOR(bitwise_and_assign)
-        BOOST_PROTO_BINARY_GENERATOR(bitwise_or_assign)
-        BOOST_PROTO_BINARY_GENERATOR(bitwise_xor_assign)
-        BOOST_PROTO_BINARY_GENERATOR(subscript)
+            BOOST_PROTO_BINARY_GENERATOR(shift_left)
+            BOOST_PROTO_BINARY_GENERATOR(shift_right)
+            BOOST_PROTO_BINARY_GENERATOR(multiplies)
+            BOOST_PROTO_BINARY_GENERATOR(divides)
+            BOOST_PROTO_BINARY_GENERATOR(modulus)
+            BOOST_PROTO_BINARY_GENERATOR(plus)
+            BOOST_PROTO_BINARY_GENERATOR(minus)
+            BOOST_PROTO_BINARY_GENERATOR(less)
+            BOOST_PROTO_BINARY_GENERATOR(greater)
+            BOOST_PROTO_BINARY_GENERATOR(less_equal)
+            BOOST_PROTO_BINARY_GENERATOR(greater_equal)
+            BOOST_PROTO_BINARY_GENERATOR(equal_to)
+            BOOST_PROTO_BINARY_GENERATOR(not_equal_to)
+            BOOST_PROTO_BINARY_GENERATOR(logical_or)
+            BOOST_PROTO_BINARY_GENERATOR(logical_and)
+            BOOST_PROTO_BINARY_GENERATOR(bitwise_and)
+            BOOST_PROTO_BINARY_GENERATOR(bitwise_or)
+            BOOST_PROTO_BINARY_GENERATOR(bitwise_xor)
+            BOOST_PROTO_BINARY_GENERATOR(comma)
+            BOOST_PROTO_BINARY_GENERATOR(mem_ptr)
 
-    #undef BOOST_PROTO_UNARY_GENERATOR
-    #undef BOOST_PROTO_BINARY_GENERATOR
+            BOOST_PROTO_BINARY_GENERATOR(assign)
+            BOOST_PROTO_BINARY_GENERATOR(shift_left_assign)
+            BOOST_PROTO_BINARY_GENERATOR(shift_right_assign)
+            BOOST_PROTO_BINARY_GENERATOR(multilpies_assign)
+            BOOST_PROTO_BINARY_GENERATOR(divides_assign)
+            BOOST_PROTO_BINARY_GENERATOR(modulus_assign)
+            BOOST_PROTO_BINARY_GENERATOR(plus_assign)
+            BOOST_PROTO_BINARY_GENERATOR(minus_assign)
+            BOOST_PROTO_BINARY_GENERATOR(bitwise_and_assign)
+            BOOST_PROTO_BINARY_GENERATOR(bitwise_or_assign)
+            BOOST_PROTO_BINARY_GENERATOR(bitwise_xor_assign)
+            BOOST_PROTO_BINARY_GENERATOR(subscript)
 
-        // tag_of
-        template<typename Expr>
-        struct tag_of
-        {
-            typedef typename Expr::proto_tag type;
-        };
+        #undef BOOST_PROTO_UNARY_GENERATOR
+        #undef BOOST_PROTO_BINARY_GENERATOR
 
-        // id
-        template<typename Expr>
-        struct id
-          : result_of::deep_copy<Expr>
-        {};
+        } // namespace op
 
     #define BOOST_PROTO_ARG(z, n, data)\
         typedef BOOST_PP_CAT(data, n) BOOST_PP_CAT(proto_arg, n);\
@@ -635,46 +639,48 @@
 
     #define N BOOST_PP_ITERATION()
     #if N > 0
-        template<BOOST_PP_ENUM_PARAMS(N, typename A)>
-        struct function<
-            BOOST_PP_ENUM_PARAMS(N, A)
-            BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_SUB(BOOST_PROTO_MAX_ARITY, 
N), void BOOST_PP_INTERCEPT), void
-        >
-          : has_pass_through_transform<
-                function<
-                    BOOST_PP_ENUM_PARAMS(N, A)
-                    
BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_SUB(BOOST_PROTO_MAX_ARITY, N), void 
BOOST_PP_INTERCEPT), void
-                >
-            >
+        namespace op
         {
-            typedef expr<proto::tag::function, BOOST_PP_CAT(args, 
N)<BOOST_PP_ENUM_PARAMS(N, A)> > type;
-            typedef type proto_base_expr;
-            typedef proto::tag::function proto_tag;
-            BOOST_PP_REPEAT(N, BOOST_PROTO_ARG, A)
-            BOOST_PP_REPEAT_FROM_TO(N, BOOST_PROTO_MAX_ARITY, BOOST_PROTO_ARG, 
detail::if_vararg<BOOST_PP_CAT(A, BOOST_PP_DEC(N))> BOOST_PP_INTERCEPT)
-        };
-
-        template<typename Tag BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)>
-        struct nary_expr<
-            Tag
-            BOOST_PP_ENUM_TRAILING_PARAMS(N, A)
-            BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_SUB(BOOST_PROTO_MAX_ARITY, 
N), void BOOST_PP_INTERCEPT), void
-        >
-          : has_pass_through_transform<
-                nary_expr<
-                    Tag
-                    BOOST_PP_ENUM_TRAILING_PARAMS(N, A)
-                    
BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_SUB(BOOST_PROTO_MAX_ARITY, N), void 
BOOST_PP_INTERCEPT), void
-                >
+            template<BOOST_PP_ENUM_PARAMS(N, typename A)>
+            struct function<
+                BOOST_PP_ENUM_PARAMS(N, A)
+                
BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_SUB(BOOST_PROTO_MAX_ARITY, N), void 
BOOST_PP_INTERCEPT), void
             >
-        {
-            typedef expr<Tag, BOOST_PP_CAT(args, N)<BOOST_PP_ENUM_PARAMS(N, 
A)> > type;
-            typedef type proto_base_expr;
-            typedef Tag proto_tag;
-            BOOST_PP_REPEAT(N, BOOST_PROTO_ARG, A)
-            BOOST_PP_REPEAT_FROM_TO(N, BOOST_PROTO_MAX_ARITY, BOOST_PROTO_ARG, 
detail::if_vararg<BOOST_PP_CAT(A, BOOST_PP_DEC(N))> BOOST_PP_INTERCEPT)
-        };
+              : has_pass_through_transform<
+                    function<
+                        BOOST_PP_ENUM_PARAMS(N, A)
+                        
BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_SUB(BOOST_PROTO_MAX_ARITY, N), void 
BOOST_PP_INTERCEPT), void
+                    >
+                >
+            {
+                typedef expr<proto::tag::function, BOOST_PP_CAT(args, 
N)<BOOST_PP_ENUM_PARAMS(N, A)> > type;
+                typedef type proto_base_expr;
+                typedef proto::tag::function proto_tag;
+                BOOST_PP_REPEAT(N, BOOST_PROTO_ARG, A)
+                BOOST_PP_REPEAT_FROM_TO(N, BOOST_PROTO_MAX_ARITY, 
BOOST_PROTO_ARG, detail::if_vararg<BOOST_PP_CAT(A, BOOST_PP_DEC(N))> 
BOOST_PP_INTERCEPT)
+            };
 
+            template<typename Tag BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)>
+            struct nary_expr<
+                Tag
+                BOOST_PP_ENUM_TRAILING_PARAMS(N, A)
+                
BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_SUB(BOOST_PROTO_MAX_ARITY, N), void 
BOOST_PP_INTERCEPT), void
+            >
+              : has_pass_through_transform<
+                    nary_expr<
+                        Tag
+                        BOOST_PP_ENUM_TRAILING_PARAMS(N, A)
+                        
BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_SUB(BOOST_PROTO_MAX_ARITY, N), void 
BOOST_PP_INTERCEPT), void
+                    >
+                >
+            {
+                typedef expr<Tag, BOOST_PP_CAT(args, 
N)<BOOST_PP_ENUM_PARAMS(N, A)> > type;
+                typedef type proto_base_expr;
+                typedef Tag proto_tag;
+                BOOST_PP_REPEAT(N, BOOST_PROTO_ARG, A)
+                BOOST_PP_REPEAT_FROM_TO(N, BOOST_PROTO_MAX_ARITY, 
BOOST_PROTO_ARG, detail::if_vararg<BOOST_PP_CAT(A, BOOST_PP_DEC(N))> 
BOOST_PP_INTERCEPT)
+            };
+        } // namespace op
 
         namespace detail
         {
@@ -726,7 +732,6 @@
             {};
         }
 
-
     #undef N
 
 #endif


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Boost-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/boost-cvs

Reply via email to