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

Modified Files:
        funop.hpp 
Log Message:
rename left_shift to shift_left, non-terminals do not get non-const overloads 
for op=, op[] and op() for better compile times

Index: funop.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/xpressive/proto/detail/funop.hpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- funop.hpp   30 Apr 2007 23:07:18 -0000      1.8
+++ funop.hpp   21 May 2007 03:21:34 -0000      1.9
@@ -10,30 +10,54 @@
 #error Do not include this file directly
 #endif
 
-template<typename Expr BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(), 
typename A)>
-struct BOOST_PP_CAT(funop, BOOST_PP_ITERATION())
-{
-    typedef expr<
-        tag::function
-      , BOOST_PP_CAT(args, BOOST_PP_INC(BOOST_PP_ITERATION()))<
-            ref_<Expr>
+    template<typename Expr BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(), 
typename A)>
+    struct BOOST_PP_CAT(funop, BOOST_PP_ITERATION())
+    {
+        typedef expr<
+            tag::function
+          , BOOST_PP_CAT(args, BOOST_PP_INC(BOOST_PP_ITERATION()))<
+                ref_<Expr>
+                BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(
+                    BOOST_PP_ITERATION()
+                  , typename result_of::as_arg<A
+                  , >::type BOOST_PP_INTERCEPT
+                )
+            >
+        > type;
+
+        static type const call(
+            Expr &expr
+            BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(BOOST_PP_ITERATION(), A, &a)
+        )
+        {
+            type that = {
+                {expr}
+                BOOST_PP_ENUM_TRAILING(BOOST_PP_ITERATION(), 
BOOST_PROTO_AS_OP, _)
+            };
+            return that;
+        }
+    };
+
+    template<typename Expr BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(), 
typename A), typename This>
+    struct funop<Expr(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), A)), This>
+      : BOOST_PP_CAT(funop, BOOST_PP_ITERATION())<
+            This
             BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(
                 BOOST_PP_ITERATION()
-              , typename result_of::as_arg<A
+              , typename remove_reference<A
               , >::type BOOST_PP_INTERCEPT
             )
         >
-    > type;
+    {};
 
-    static type const call(
-        Expr &expr
-        BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(BOOST_PP_ITERATION(), A, &a)
-    )
-    {
-        type that = {
-            {expr}
-            BOOST_PP_ENUM_TRAILING(BOOST_PP_ITERATION(), BOOST_PROTO_AS_OP, _)
-        };
-        return that;
-    }
-};
+    template<typename Expr BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(), 
typename A), typename This>
+    struct funop<Expr const(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), A)), 
This>
+      : BOOST_PP_CAT(funop, BOOST_PP_ITERATION())<
+            This const
+            BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(
+                BOOST_PP_ITERATION()
+              , typename remove_reference<A
+              , >::type BOOST_PP_INTERCEPT
+            )
+        >
+    {};


-------------------------------------------------------------------------
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