Boost logo

Boost-Commit :

From: eric_at_[hidden]
Date: 2007-12-22 01:08:48


Author: eric_niebler
Date: 2007-12-22 01:08:47 EST (Sat, 22 Dec 2007)
New Revision: 42241
URL: http://svn.boost.org/trac/boost/changeset/42241

Log:
port extends to c++0x
Text files modified:
   branches/proto/v3/boost/xpressive/proto/expr.hpp | 6
   branches/proto/v3/boost/xpressive/proto/extends.hpp | 324 +++++++++++++++++++++++++--------------
   branches/proto/v3/boost/xpressive/proto/proto_fwd.hpp | 6
   branches/proto/v3/boost/xpressive/regex_actions.hpp | 6
   branches/proto/v3/libs/xpressive/proto/test/lambda.cpp | 4
   branches/proto/v3/libs/xpressive/proto/test/proto_fusion_s.cpp | 6
   6 files changed, 222 insertions(+), 130 deletions(-)

Modified: branches/proto/v3/boost/xpressive/proto/expr.hpp
==============================================================================
--- branches/proto/v3/boost/xpressive/proto/expr.hpp (original)
+++ branches/proto/v3/boost/xpressive/proto/expr.hpp 2007-12-22 01:08:47 EST (Sat, 22 Dec 2007)
@@ -227,7 +227,7 @@
         /// construct
         ///
         template<typename Expr, typename A>
- inline Expr construct(A &a)
+ inline Expr construct(A const &a)
         {
             typedef typename Expr::proto_args::cons_type cons_type;
             Expr that = {proto::argsns_::make_cons_<cons_type>(a)};
@@ -238,7 +238,7 @@
         /// \overload
         ///
         template<typename Expr, typename... A>
- inline Expr construct(A const &... a)
+ inline Expr construct(A &... a)
         {
             typedef typename Expr::proto_args::cons_type cons_type;
             Expr that = {proto::argsns_::make_cons_<cons_type>(a...)};
@@ -247,7 +247,7 @@
     #else
     #define TMP(Z, N, DATA) \
         template<typename Expr BOOST_PP_ENUM_TRAILING_PARAMS_Z(Z, N, typename A)> \
- inline Expr construct(BOOST_PP_ENUM_BINARY_PARAMS_Z(Z, N, A, const &a)) \
+ inline Expr construct(BOOST_PP_ENUM_BINARY_PARAMS_Z(Z, N, A, &a)) \
         { \
             typedef typename Expr::proto_args::cons_type cons_type; \
             Expr that = {proto::argsns_::make_cons_<cons_type>(BOOST_PP_ENUM_PARAMS_Z(Z, N, a))}; \

Modified: branches/proto/v3/boost/xpressive/proto/extends.hpp
==============================================================================
--- branches/proto/v3/boost/xpressive/proto/extends.hpp (original)
+++ branches/proto/v3/boost/xpressive/proto/extends.hpp 2007-12-22 01:08:47 EST (Sat, 22 Dec 2007)
@@ -53,145 +53,237 @@
         Expr const &proto_base() const \
         { \
             return this->expr; \
- } \
- /**/
+ }
 
+#if defined(BOOST_HAS_VARIADIC_TMPL) && defined(BOOST_HAS_RVALUE_REFS)
         /// INTERNAL ONLY
         ///
- #define BOOST_PROTO_EXTENDS_ASSIGN_IMPL_(Expr, Derived, Domain, Const) \
+ #define BOOST_PROTO_EXTENDS_ASSIGN_IMPL_(Const) \
         template<typename A> \
- typename boost::mpl::apply_wrap1< \
- Domain \
- , boost::proto::expr< \
- boost::proto::tag::assign \
- , boost::proto::args< \
- Derived BOOST_PROTO_CONST ## Const & \
- , typename boost::proto::result_of::as_expr_ref<A, Domain>::type \
- > \
- > \
+ typename boost::proto::result_of::make_expr_ref< \
+ boost::proto::tag::assign \
+ , proto_domain \
+ , proto_derived_expr BOOST_PROTO_CONST ## Const & \
+ , A \
>::type const \
         operator =(A &&a) BOOST_PROTO_CONST ## Const \
         { \
- typedef \
- boost::proto::expr< \
- boost::proto::tag::assign \
- , boost::proto::args< \
- Derived BOOST_PROTO_CONST ## Const & \
- , typename boost::proto::result_of::as_expr_ref<A, Domain>::type \
- > \
- > \
- that_type; \
- that_type that = { \
- {*static_cast<Derived BOOST_PROTO_CONST ## Const *>(this) \
- , {boost::proto::result_of::as_expr_ref<A, Domain>::call(a)}} \
- }; \
- return Domain::make(that); \
- } \
- /**/
+ return boost::proto::result_of::make_expr_ref< \
+ boost::proto::tag::assign \
+ , proto_domain \
+ , proto_derived_expr BOOST_PROTO_CONST ## Const & \
+ , A \
+ >::call(*static_cast<proto_derived_expr BOOST_PROTO_CONST ## Const *>(this), a); \
+ }
+
+ #define BOOST_PROTO_EXTENDS_ASSIGN() \
+ BOOST_PROTO_EXTENDS_ASSIGN_IMPL_(0) \
+ BOOST_PROTO_EXTENDS_ASSIGN_IMPL_(1)
 
- #define BOOST_PROTO_EXTENDS_ASSIGN_CONST(Expr, Derived, Domain) \
- BOOST_PROTO_EXTENDS_ASSIGN_IMPL_(Expr, Derived, Domain, 1)
+ /// INTERNAL ONLY
+ ///
+ #define BOOST_PROTO_EXTENDS_SUBSCRIPT_IMPL_(Const) \
+ template<typename A> \
+ typename boost::proto::result_of::make_expr_ref< \
+ boost::proto::tag::subscript \
+ , proto_domain \
+ , proto_derived_expr BOOST_PROTO_CONST ## Const & \
+ , A \
+ >::type const \
+ operator [](A &&a) BOOST_PROTO_CONST ## Const \
+ { \
+ return boost::proto::result_of::make_expr_ref< \
+ boost::proto::tag::subscript \
+ , proto_domain \
+ , proto_derived_expr BOOST_PROTO_CONST ## Const & \
+ , A \
+ >::call(*static_cast<proto_derived_expr BOOST_PROTO_CONST ## Const *>(this), a); \
+ }
+
+ #define BOOST_PROTO_EXTENDS_SUBSCRIPT() \
+ BOOST_PROTO_EXTENDS_SUBSCRIPT_IMPL_(0) \
+ BOOST_PROTO_EXTENDS_SUBSCRIPT_IMPL_(1)
 
- #define BOOST_PROTO_EXTENDS_ASSIGN_NON_CONST(Expr, Derived, Domain) \
- BOOST_PROTO_EXTENDS_ASSIGN_IMPL_(Expr, Derived, Domain, 0)
+ /// INTERNAL ONLY
+ ///
+ #define BOOST_PROTO_EXTENDS_FUNCTION_IMPL_(Const) \
+ template<typename... A> \
+ typename boost::proto::result_of::make_expr_ref< \
+ boost::proto::tag::function \
+ , proto_domain \
+ , proto_derived_expr BOOST_PROTO_CONST ## Const & \
+ , A... \
+ >::type const \
+ operator ()(A &&... a) BOOST_PROTO_CONST ## Const \
+ { \
+ return boost::proto::result_of::make_expr_ref< \
+ boost::proto::tag::function \
+ , proto_domain \
+ , proto_derived_expr BOOST_PROTO_CONST ## Const & \
+ , A... \
+ >::call(*static_cast<proto_derived_expr BOOST_PROTO_CONST ## Const *>(this), a...); \
+ }
+
+ #define BOOST_PROTO_EXTENDS_FUNCTION() \
+ BOOST_PROTO_EXTENDS_FUNCTION_IMPL_(0) \
+ BOOST_PROTO_EXTENDS_FUNCTION_IMPL_(1)
 
- #define BOOST_PROTO_EXTENDS_ASSIGN(Expr, Derived, Domain) \
- BOOST_PROTO_EXTENDS_ASSIGN_CONST(Expr, Derived, Domain) \
- BOOST_PROTO_EXTENDS_ASSIGN_NON_CONST(Expr, Derived, Domain) \
- /**/
+#else
+ /// INTERNAL ONLY
+ ///
+ #define BOOST_PROTO_EXTENDS_ASSIGN_IMPL_(Const) \
+ template<typename A> \
+ typename boost::proto::result_of::make_expr_ref< \
+ boost::proto::tag::assign \
+ , proto_domain \
+ , proto_derived_expr BOOST_PROTO_CONST ## Const & \
+ , A & \
+ >::type const \
+ operator =(A &a) BOOST_PROTO_CONST ## Const \
+ { \
+ return boost::proto::result_of::make_expr_ref< \
+ boost::proto::tag::assign \
+ , proto_domain \
+ , proto_derived_expr BOOST_PROTO_CONST ## Const & \
+ , A & \
+ >::call(*static_cast<proto_derived_expr BOOST_PROTO_CONST ## Const *>(this), a); \
+ } \
+ template<typename A> \
+ typename boost::proto::result_of::make_expr_ref< \
+ boost::proto::tag::assign \
+ , proto_domain \
+ , proto_derived_expr BOOST_PROTO_CONST ## Const & \
+ , A const & \
+ >::type const \
+ operator =(A const &a) BOOST_PROTO_CONST ## Const \
+ { \
+ return boost::proto::result_of::make_expr_ref< \
+ boost::proto::tag::assign \
+ , proto_domain \
+ , proto_derived_expr BOOST_PROTO_CONST ## Const & \
+ , A const & \
+ >::call(*static_cast<proto_derived_expr BOOST_PROTO_CONST ## Const *>(this), a); \
+ }
+
+ #define BOOST_PROTO_EXTENDS_ASSIGN() \
+ BOOST_PROTO_EXTENDS_ASSIGN_IMPL_(0) \
+ BOOST_PROTO_EXTENDS_ASSIGN_IMPL_(1)
 
         /// INTERNAL ONLY
         ///
- #define BOOST_PROTO_EXTENDS_SUBSCRIPT_IMPL_(Expr, Derived, Domain, Const) \
+ #define BOOST_PROTO_EXTENDS_SUBSCRIPT_IMPL_(Const) \
         template<typename A> \
- typename boost::mpl::apply_wrap1< \
- Domain \
- , boost::proto::expr< \
- boost::proto::tag::subscript \
- , boost::proto::args< \
- Derived BOOST_PROTO_CONST ## Const & \
- , typename boost::proto::result_of::as_expr_ref<A, Domain>::type \
- > \
- > \
+ typename boost::proto::result_of::make_expr_ref< \
+ boost::proto::tag::subscript \
+ , proto_domain \
+ , proto_derived_expr BOOST_PROTO_CONST ## Const & \
+ , A & \
>::type const \
- operator [](A &&a) BOOST_PROTO_CONST ## Const \
+ operator [](A &a) BOOST_PROTO_CONST ## Const \
         { \
- typedef \
- boost::proto::expr< \
- boost::proto::tag::subscript \
- , boost::proto::args< \
- Derived BOOST_PROTO_CONST ## Const & \
- , typename boost::proto::result_of::as_expr_ref<A, Domain>::type \
- > \
- > \
- that_type; \
- that_type that = { \
- {*static_cast<Derived BOOST_PROTO_CONST ## Const *>(this) \
- , {boost::proto::result_of::as_expr_ref<A, Domain>::call(a)}} \
- }; \
- return Domain::make(that); \
+ return boost::proto::result_of::make_expr_ref< \
+ boost::proto::tag::subscript \
+ , proto_domain \
+ , proto_derived_expr BOOST_PROTO_CONST ## Const & \
+ , A & \
+ >::call(*static_cast<proto_derived_expr BOOST_PROTO_CONST ## Const *>(this), a); \
         } \
- /**/
+ template<typename A> \
+ typename boost::proto::result_of::make_expr_ref< \
+ boost::proto::tag::subscript \
+ , proto_domain \
+ , proto_derived_expr BOOST_PROTO_CONST ## Const & \
+ , A const & \
+ >::type const \
+ operator [](A const &a) BOOST_PROTO_CONST ## Const \
+ { \
+ return boost::proto::result_of::make_expr_ref< \
+ boost::proto::tag::subscript \
+ , proto_domain \
+ , proto_derived_expr BOOST_PROTO_CONST ## Const & \
+ , A const & \
+ >::call(*static_cast<proto_derived_expr BOOST_PROTO_CONST ## Const *>(this), a); \
+ }
+
+ #define BOOST_PROTO_EXTENDS_SUBSCRIPT() \
+ BOOST_PROTO_EXTENDS_SUBSCRIPT_IMPL_(0) \
+ BOOST_PROTO_EXTENDS_SUBSCRIPT_IMPL_(1)
 
- #define BOOST_PROTO_EXTENDS_SUBSCRIPT_CONST(Expr, Derived, Domain) \
- BOOST_PROTO_EXTENDS_SUBSCRIPT_IMPL_(Expr, Derived, Domain, 1)
+ /// INTERNAL ONLY
+ ///
+ #define BOOST_PROTO_EXTENDS_FUNCTION_IMPL_1 \
+ ((0)(1))
 
- #define BOOST_PROTO_EXTENDS_SUBSCRIPT_NON_CONST(Expr, Derived, Domain) \
- BOOST_PROTO_EXTENDS_SUBSCRIPT_IMPL_(Expr, Derived, Domain, 0)
+ /// INTERNAL ONLY
+ ///
+ #define BOOST_PROTO_EXTENDS_FUNCTION_IMPL_2(R, PRODUCT) \
+ BOOST_PROTO_EXTENDS_FUNCTION_IMPL_8(R, BOOST_PP_SEQ_SIZE(PRODUCT), PRODUCT)
 
- #define BOOST_PROTO_EXTENDS_SUBSCRIPT(Expr, Derived, Domain) \
- BOOST_PROTO_EXTENDS_SUBSCRIPT_CONST(Expr, Derived, Domain) \
- BOOST_PROTO_EXTENDS_SUBSCRIPT_NON_CONST(Expr, Derived, Domain) \
- /**/
+ /// INTERNAL ONLY
+ ///
+ #define BOOST_PROTO_EXTENDS_FUNCTION_IMPL_3(R, STATE) \
+ BOOST_PP_NOT_EQUAL(BOOST_PROTO_MAX_ARITY, BOOST_PP_SEQ_SIZE(STATE))
 
         /// INTERNAL ONLY
         ///
- #define BOOST_PROTO_EXTENDS_FUNCTION_IMPL_(Expr, Derived, Domain, Const) \
- template<typename... A> \
- typename boost::mpl::apply_wrap1< \
- Domain \
- , boost::proto::expr< \
- boost::proto::tag::function \
- , boost::proto::args< \
- Derived BOOST_PROTO_CONST ## Const & \
- , typename boost::proto::result_of::as_expr_ref<A, Domain>::type... \
- > \
- > \
- >::type const \
- operator ()(A &&... a) BOOST_PROTO_CONST ## Const \
- { \
- typedef \
- boost::proto::args< \
- Derived BOOST_PROTO_CONST ## Const & \
- , typename boost::proto::result_of::as_expr_ref<A, Domain>::type... \
- > \
- args_type; \
- typedef \
- boost::proto::expr< \
- boost::proto::tag::function \
- , args_type \
- > \
- that_type; \
- that_type that = { \
- boost::proto::argsns_::make_cons_<typename args_type::cons_type>( \
- *static_cast<Derived BOOST_PROTO_CONST ## Const *>(this) \
- , boost::proto::result_of::as_expr_ref<A, Domain>::call(a)... \
- ) \
- }; \
- return Domain::make(that); \
- } \
- /**/
+ #define BOOST_PROTO_EXTENDS_FUNCTION_IMPL_4(R, STATE) \
+ STATE BOOST_PROTO_EXTENDS_FUNCTION_IMPL_1
+
+ /// INTERNAL ONLY
+ ///
+ #define BOOST_PROTO_EXTENDS_FUNCTION_IMPL_5(R, _, I, ELEM) \
+ BOOST_PP_COMMA_IF(I) \
+ BOOST_PP_CAT(A, I) BOOST_PP_CAT(BOOST_PROTO_CONST, ELEM) &BOOST_PP_CAT(a, I)
+
+ /// INTERNAL ONLY
+ ///
+ #define BOOST_PROTO_EXTENDS_FUNCTION_IMPL_6(R, _, I, ELEM) \
+ , BOOST_PP_CAT(A, I) BOOST_PP_CAT(BOOST_PROTO_CONST, ELEM) &
+
+ /// INTERNAL ONLY
+ ///
+ #define BOOST_PROTO_EXTENDS_FUNCTION_IMPL_7(R, STATE) \
+ BOOST_PP_SEQ_FOR_EACH_PRODUCT_R(R, BOOST_PROTO_EXTENDS_FUNCTION_IMPL_2, STATE)
 
- #define BOOST_PROTO_EXTENDS_FUNCTION_CONST(Expr, Derived, Domain) \
- BOOST_PROTO_EXTENDS_FUNCTION_IMPL_(Expr, Derived, Domain, 1)
+ /// INTERNAL ONLY
+ ///
+ #define BOOST_PROTO_EXTENDS_FUNCTION_IMPL_8(R, SIZE, PRODUCT) \
+ BOOST_PROTO_EXTENDS_FUNCTION_IMPL_9(R, SIZE, PRODUCT, 0) \
+ BOOST_PROTO_EXTENDS_FUNCTION_IMPL_9(R, SIZE, PRODUCT, 1)
 
- #define BOOST_PROTO_EXTENDS_FUNCTION_NON_CONST(Expr, Derived, Domain) \
- BOOST_PROTO_EXTENDS_FUNCTION_IMPL_(Expr, Derived, Domain, 0)
+ /// INTERNAL ONLY
+ ///
+ #define BOOST_PROTO_EXTENDS_FUNCTION_IMPL_9(R, SIZE, PRODUCT, Const) \
+ template<BOOST_PP_ENUM_PARAMS(SIZE, typename A)> \
+ typename boost::proto::result_of::make_expr_ref< \
+ boost::proto::tag::function \
+ , proto_domain \
+ , proto_derived_expr BOOST_PROTO_CONST ## Const & \
+ BOOST_PP_SEQ_FOR_EACH_I_R(R, BOOST_PROTO_EXTENDS_FUNCTION_IMPL_6, ~, PRODUCT) \
+ >::type const \
+ operator ()(BOOST_PP_SEQ_FOR_EACH_I_R(R, BOOST_PROTO_EXTENDS_FUNCTION_IMPL_5, ~, PRODUCT)) \
+ BOOST_PROTO_CONST ## Const \
+ { \
+ return boost::proto::result_of::make_expr_ref< \
+ boost::proto::tag::function \
+ , proto_domain \
+ , proto_derived_expr BOOST_PROTO_CONST ## Const & \
+ BOOST_PP_SEQ_FOR_EACH_I_R(R, BOOST_PROTO_EXTENDS_FUNCTION_IMPL_6, ~, PRODUCT) \
+ >::call( \
+ *static_cast<proto_derived_expr BOOST_PROTO_CONST ## Const *>(this) \
+ BOOST_PP_ENUM_TRAILING_PARAMS(SIZE, a) \
+ ); \
+ }
+
+ #define BOOST_PROTO_EXTENDS_FUNCTION() \
+ BOOST_PP_FOR( \
+ BOOST_PROTO_EXTENDS_FUNCTION_IMPL_1 \
+ , BOOST_PROTO_EXTENDS_FUNCTION_IMPL_3 \
+ , BOOST_PROTO_EXTENDS_FUNCTION_IMPL_4 \
+ , BOOST_PROTO_EXTENDS_FUNCTION_IMPL_7 \
+ )
 
- #define BOOST_PROTO_EXTENDS_FUNCTION(Expr, Derived, Domain) \
- BOOST_PROTO_EXTENDS_FUNCTION_CONST(Expr, Derived, Domain) \
- BOOST_PROTO_EXTENDS_FUNCTION_NON_CONST(Expr, Derived, Domain) \
- /**/
+#endif
 
     namespace exprns_
     {
@@ -241,9 +333,9 @@
             {}
 
             BOOST_PROTO_EXTENDS(Expr, Derived, Domain)
- BOOST_PROTO_EXTENDS_ASSIGN(Expr, Derived, Domain)
- BOOST_PROTO_EXTENDS_SUBSCRIPT(Expr, Derived, Domain)
- BOOST_PROTO_EXTENDS_FUNCTION(Expr, Derived, Domain)
+ BOOST_PROTO_EXTENDS_ASSIGN()
+ BOOST_PROTO_EXTENDS_SUBSCRIPT()
+ BOOST_PROTO_EXTENDS_FUNCTION()
         };
 
     } // namespace exprns_

Modified: branches/proto/v3/boost/xpressive/proto/proto_fwd.hpp
==============================================================================
--- branches/proto/v3/boost/xpressive/proto/proto_fwd.hpp (original)
+++ branches/proto/v3/boost/xpressive/proto/proto_fwd.hpp 2007-12-22 01:08:47 EST (Sat, 22 Dec 2007)
@@ -113,15 +113,15 @@
         struct is_proto_expr;
 
         template<typename Expr, typename A>
- Expr construct(A &a);
+ Expr construct(A const &a);
 
     #ifdef BOOST_HAS_VARIADIC_TMPL
         template<typename Expr, typename... A>
- Expr construct(A const &... a);
+ Expr construct(A &... a);
     #else
     #define TMP(Z, N, DATA) \
         template<typename Expr BOOST_PP_ENUM_TRAILING_PARAMS_Z(Z, N, typename A)> \
- Expr construct(BOOST_PP_ENUM_BINARY_PARAMS_Z(Z, N, A, const &a)); \
+ Expr construct(BOOST_PP_ENUM_BINARY_PARAMS_Z(Z, N, A, &a)); \
         /**/
         BOOST_PP_REPEAT_FROM_TO(1, BOOST_PP_INC(BOOST_PROTO_MAX_ARITY), TMP, ~)
     #undef TMP

Modified: branches/proto/v3/boost/xpressive/regex_actions.hpp
==============================================================================
--- branches/proto/v3/boost/xpressive/regex_actions.hpp (original)
+++ branches/proto/v3/boost/xpressive/regex_actions.hpp 2007-12-22 01:08:47 EST (Sat, 22 Dec 2007)
@@ -797,9 +797,9 @@
         typedef typename proto::terminal<detail::action_arg<T, mpl::int_<I> > >::type action_arg_type;
 
         BOOST_PROTO_EXTENDS(action_arg_type, this_type, proto::default_domain)
- BOOST_PROTO_EXTENDS_ASSIGN(action_arg_type, this_type, proto::default_domain)
- BOOST_PROTO_EXTENDS_SUBSCRIPT(action_arg_type, this_type, proto::default_domain)
- BOOST_PROTO_EXTENDS_FUNCTION(action_arg_type, this_type, proto::default_domain)
+ BOOST_PROTO_EXTENDS_ASSIGN()
+ BOOST_PROTO_EXTENDS_SUBSCRIPT()
+ BOOST_PROTO_EXTENDS_FUNCTION()
     };
 
     /// Usage: construct\<Type\>(arg1, arg2)

Modified: branches/proto/v3/libs/xpressive/proto/test/lambda.cpp
==============================================================================
--- branches/proto/v3/libs/xpressive/proto/test/lambda.cpp (original)
+++ branches/proto/v3/libs/xpressive/proto/test/lambda.cpp 2007-12-22 01:08:47 EST (Sat, 22 Dec 2007)
@@ -112,8 +112,8 @@
 struct lambda
 {
     BOOST_PROTO_EXTENDS(T, lambda<T>, lambda_domain)
- BOOST_PROTO_EXTENDS_ASSIGN(T, lambda<T>, lambda_domain)
- BOOST_PROTO_EXTENDS_SUBSCRIPT(T, lambda<T>, lambda_domain)
+ BOOST_PROTO_EXTENDS_ASSIGN()
+ BOOST_PROTO_EXTENDS_SUBSCRIPT()
 
     // Careful not to evaluate the return type of the nullary function
     // unless we have a nullary lambda!

Modified: branches/proto/v3/libs/xpressive/proto/test/proto_fusion_s.cpp
==============================================================================
--- branches/proto/v3/libs/xpressive/proto/test/proto_fusion_s.cpp (original)
+++ branches/proto/v3/libs/xpressive/proto/test/proto_fusion_s.cpp 2007-12-22 01:08:47 EST (Sat, 22 Dec 2007)
@@ -129,9 +129,9 @@
 struct My
 {
     BOOST_PROTO_EXTENDS(Expr, My<Expr>, MyDomain)
- BOOST_PROTO_EXTENDS_ASSIGN(Expr, My<Expr>, MyDomain)
- BOOST_PROTO_EXTENDS_SUBSCRIPT(Expr, My<Expr>, MyDomain)
- BOOST_PROTO_EXTENDS_FUNCTION(Expr, My<Expr>, MyDomain)
+ BOOST_PROTO_EXTENDS_ASSIGN()
+ BOOST_PROTO_EXTENDS_SUBSCRIPT()
+ BOOST_PROTO_EXTENDS_FUNCTION()
 };
 
 void test2()


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk