$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: eric_at_[hidden]
Date: 2007-12-02 19:30:59
Author: eric_niebler
Date: 2007-12-02 19:30:57 EST (Sun, 02 Dec 2007)
New Revision: 41612
URL: http://svn.boost.org/trac/boost/changeset/41612
Log:
remove the distinction between raw and function transforms
Text files modified: 
   branches/proto/v3/boost/xpressive/detail/static/grammar.hpp     |    25 ++++-----                               
   branches/proto/v3/boost/xpressive/proto/fusion.hpp              |    21 +++----                                 
   branches/proto/v3/boost/xpressive/proto/make_expr.hpp           |    22 +++-----                                
   branches/proto/v3/boost/xpressive/proto/matches.hpp             |    49 ++++++++-----------                     
   branches/proto/v3/boost/xpressive/proto/proto_fwd.hpp           |    22 +-------                                
   branches/proto/v3/boost/xpressive/proto/transform/arg.hpp       |    24 ++++-----                               
   branches/proto/v3/boost/xpressive/proto/transform/call.hpp      |    15 ++---                                   
   branches/proto/v3/boost/xpressive/proto/transform/fold.hpp      |    18 +++----                                 
   branches/proto/v3/boost/xpressive/proto/transform/fold_tree.hpp |    32 +++++-------                            
   branches/proto/v3/boost/xpressive/proto/transform/when.hpp      |    99 +++++++++++++-------------------------- 
   branches/proto/v3/libs/xpressive/proto/example/mixed.cpp        |     2                                         
   branches/proto/v3/libs/xpressive/proto/example/vec3.cpp         |     2                                         
   branches/proto/v3/libs/xpressive/proto/test/examples.cpp        |     8 +-                                      
   branches/proto/v3/libs/xpressive/proto/test/main.cpp            |     4                                         
   14 files changed, 137 insertions(+), 206 deletions(-)
Modified: branches/proto/v3/boost/xpressive/detail/static/grammar.hpp
==============================================================================
--- branches/proto/v3/boost/xpressive/detail/static/grammar.hpp	(original)
+++ branches/proto/v3/boost/xpressive/detail/static/grammar.hpp	2007-12-02 19:30:57 EST (Sun, 02 Dec 2007)
@@ -17,7 +17,6 @@
 #include <boost/mpl/bool.hpp>
 #include <boost/mpl/assert.hpp>
 #include <boost/mpl/eval_if.hpp>
-#include <boost/mpl/apply_wrap.hpp>
 #include <boost/mpl/next_prior.hpp>
 #include <boost/fusion/include/cons.hpp>
 #include <boost/xpressive/proto/proto.hpp>
@@ -143,7 +142,7 @@
           : mpl::true_
         {};
 
-        struct as_matcher : function_transform
+        struct as_matcher : transform_base
         {
             template<typename Sig>
             struct result;
@@ -161,7 +160,7 @@
             }
         };
 
-        struct get_width : function_transform
+        struct get_width : transform_base
         {
             typedef std::size_t result_type;
 
@@ -172,7 +171,7 @@
             }
         };
 
-        struct mark_number : function_transform
+        struct mark_number : transform_base
         {
             typedef int result_type;
 
@@ -183,7 +182,7 @@
             }
         };
 
-        struct get_hidden_mark : function_transform
+        struct get_hidden_mark : transform_base
         {
             typedef int result_type;
 
@@ -194,7 +193,7 @@
             }
         };
 
-        struct traits : function_transform
+        struct traits : transform_base
         {
             template<typename Sig>
             struct result;
@@ -213,7 +212,7 @@
             }
         };
 
-        struct newline : function_transform
+        struct newline : transform_base
         {
             template<typename Sig>
             struct result;
@@ -232,7 +231,7 @@
             }
         };
 
-        struct as_posix_charset : function_transform
+        struct as_posix_charset : transform_base
         {
             template<typename Sig>
             struct result;
@@ -271,7 +270,7 @@
 
         // Place a head and a tail in sequence, if it's not
         // already in sequence.
-        struct in_sequence : function_transform
+        struct in_sequence : transform_base
         {
             template<typename Sig>
             struct result;
@@ -339,7 +338,7 @@
             >
         {};
         
-        struct fill_list_set : function_transform
+        struct fill_list_set : transform_base
         {
             template<typename Sig>
             struct result;
@@ -379,7 +378,7 @@
             return const_cast<T &>(t);
         }
 
-        struct merge_charset : function_transform
+        struct merge_charset : transform_base
         {
             template<typename Sig>
             struct result;
@@ -429,7 +428,7 @@
             }
         };
 
-        struct invert : function_transform
+        struct invert : transform_base
         {
             template<typename Sig>
             struct result;
@@ -448,7 +447,7 @@
             }
         };
 
-        struct modify : function_transform
+        struct modify : transform_base
         {
             template<typename Sig>
             struct result;
Modified: branches/proto/v3/boost/xpressive/proto/fusion.hpp
==============================================================================
--- branches/proto/v3/boost/xpressive/proto/fusion.hpp	(original)
+++ branches/proto/v3/boost/xpressive/proto/fusion.hpp	2007-12-02 19:30:57 EST (Sun, 02 Dec 2007)
@@ -135,22 +135,19 @@
     }
 
     template<>
-    struct transform_category<functional::flatten>
-    {
-        typedef function_transform type;
-    };
+    struct is_transform<functional::flatten>
+      : mpl::true_
+    {};
 
     template<>
-    struct transform_category<functional::pop_front>
-    {
-        typedef function_transform type;
-    };
+    struct is_transform<functional::pop_front>
+      : mpl::true_
+    {};
 
     template<>
-    struct transform_category<functional::reverse>
-    {
-        typedef function_transform type;
-    };
+    struct is_transform<functional::reverse>
+      : mpl::true_
+    {};
 
     functional::flatten const flatten = {};
 
Modified: branches/proto/v3/boost/xpressive/proto/make_expr.hpp
==============================================================================
--- branches/proto/v3/boost/xpressive/proto/make_expr.hpp	(original)
+++ branches/proto/v3/boost/xpressive/proto/make_expr.hpp	2007-12-02 19:30:57 EST (Sun, 02 Dec 2007)
@@ -13,7 +13,6 @@
 #include <boost/version.hpp>
 #include <boost/ref.hpp>
 #include <boost/mpl/if.hpp>
-#include <boost/mpl/apply_wrap.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <boost/type_traits/is_same.hpp>
 #include <boost/type_traits/add_reference.hpp>
@@ -576,22 +575,19 @@
 
 
     template<typename Tag, typename Domain>
-    struct transform_category<functional::make_expr<Tag, Domain> >
-    {
-        typedef function_transform type;
-    };
+    struct is_transform<functional::make_expr<Tag, Domain> >
+      : mpl::true_
+    {};
 
     template<typename Tag, typename Domain>
-    struct transform_category<functional::unpack_expr<Tag, Domain> >
-    {
-        typedef function_transform type;
-    };
+    struct is_transform<functional::unpack_expr<Tag, Domain> >
+      : mpl::true_
+    {};
 
     template<typename Tag, typename Domain>
-    struct transform_category<functional::unfused_expr<Tag, Domain> >
-    {
-        typedef function_transform type;
-    };
+    struct is_transform<functional::unfused_expr<Tag, Domain> >
+      : mpl::true_
+    {};
 
 }}
 
Modified: branches/proto/v3/boost/xpressive/proto/matches.hpp
==============================================================================
--- branches/proto/v3/boost/xpressive/proto/matches.hpp	(original)
+++ branches/proto/v3/boost/xpressive/proto/matches.hpp	2007-12-02 19:30:57 EST (Sun, 02 Dec 2007)
@@ -16,7 +16,6 @@
 #include <boost/mpl/assert.hpp>
 #include <boost/mpl/identity.hpp>
 #include <boost/mpl/eval_if.hpp>
-#include <boost/mpl/apply_wrap.hpp>
 #include <boost/type_traits.hpp>
 #include <boost/xpressive/proto/proto_fwd.hpp>
 #include <boost/xpressive/proto/transform/arg.hpp>
@@ -429,7 +428,7 @@
         } // namespace detail
 
         template<typename... Alts>
-        struct or_ : raw_transform
+        struct or_ : transform_base
         {
             typedef or_ proto_base_expr;
 
@@ -461,7 +460,7 @@
 
         // if_
         template<typename If, typename Then, typename Else>
-        struct if_ : raw_transform
+        struct if_ : transform_base
         {
             typedef if_ proto_base_expr;
 
@@ -500,7 +499,7 @@
         };
 
         template<typename Cases>
-        struct switch_ : raw_transform
+        struct switch_ : transform_base
         {
             typedef switch_ proto_base_expr;
 
@@ -539,40 +538,34 @@
     }
 
     template<typename... Args>
-    struct transform_category<or_<Args...> >
-    {
-        typedef raw_transform type;
-    };
+    struct is_transform<or_<Args...> >
+      : mpl::true_
+    {};
 
     template<typename... Args>
-    struct transform_category<and_<Args...> >
-    {
-        typedef raw_transform type;
-    };
+    struct is_transform<and_<Args...> >
+      : mpl::true_
+    {};
 
     template<typename Grammar>
-    struct transform_category<not_<Grammar> >
-    {
-        typedef raw_transform type;
-    };
+    struct is_transform<not_<Grammar> >
+      : mpl::true_
+    {};
 
     template<typename If, typename Then, typename Else>
-    struct transform_category<if_<If, Then, Else> >
-    {
-        typedef raw_transform type;
-    };
+    struct is_transform<if_<If, Then, Else> >
+      : mpl::true_
+    {};
 
     template<typename Grammar>
-    struct transform_category<vararg<Grammar> >
-    {
-        typedef raw_transform type;
-    };
+    struct is_transform<vararg<Grammar> >
+      : mpl::true_
+    {};
 
     template<>
-    struct transform_category<_>
-    {
-        typedef raw_transform type;
-    };
+    struct is_transform<_>
+      : mpl::true_
+    {};
 
 }}
 
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-02 19:30:57 EST (Sun, 02 Dec 2007)
@@ -327,33 +327,21 @@
     using control::N;
 
     template<typename T>
-    struct transform_category;
+    struct is_transform;
 
     template<typename T>
     struct is_aggregate;
 
     namespace transform
     {
-        // Transforms can be of these 3 types
-        struct no_transform
-        {};
-
-        struct raw_transform
+        struct transform_base
         {
-            typedef void proto_raw_transform_;
-        };
-
-        struct function_transform
-        {
-            typedef void proto_function_transform_;
+            typedef void proto_is_transform_;
         };
 
         template<typename Fun, typename... Args>
         struct call;
 
-        template<typename Trans, typename... Args>
-        struct apply;
-
         template<typename Sequence, typename State, typename Fun>
         struct fold;
 
@@ -420,9 +408,7 @@
     using transform::reverse_fold;
     using transform::fold_tree;
     using transform::reverse_fold_tree;
-    using transform::no_transform;
-    using transform::raw_transform;
-    using transform::function_transform;
+    using transform::transform_base;
 
     namespace context
     {
Modified: branches/proto/v3/boost/xpressive/proto/transform/arg.hpp
==============================================================================
--- branches/proto/v3/boost/xpressive/proto/transform/arg.hpp	(original)
+++ branches/proto/v3/boost/xpressive/proto/transform/arg.hpp	2007-12-02 19:30:57 EST (Sun, 02 Dec 2007)
@@ -18,7 +18,7 @@
     namespace transform
     {
 
-        struct _expr : raw_transform
+        struct _expr : transform_base
         {
             template<typename Sig>
             struct result;
@@ -37,7 +37,7 @@
             }
         };
 
-        struct _state : raw_transform
+        struct _state : transform_base
         {
             template<typename Sig>
             struct result;
@@ -56,7 +56,7 @@
             }
         };
 
-        struct _visitor : raw_transform
+        struct _visitor : transform_base
         {
             template<typename Sig>
             struct result;
@@ -76,7 +76,7 @@
         };
 
         template<int I>
-        struct _arg_c : raw_transform
+        struct _arg_c : transform_base
         {
             template<typename Sig>
             struct result;
@@ -110,7 +110,7 @@
         typedef _arg1 _right;
 
         template<typename T>
-        struct always : raw_transform
+        struct always : transform_base
         {
             template<typename Sig>
             struct result;
@@ -130,16 +130,14 @@
     }
 
     template<typename T>
-    struct transform_category<transform::always<T> >
-    {
-        typedef raw_transform type;
-    };
+    struct is_transform<transform::always<T> >
+      : mpl::true_
+    {};
 
     template<int I>
-    struct transform_category<transform::_arg_c<I> >
-    {
-        typedef raw_transform type;
-    };
+    struct is_transform<transform::_arg_c<I> >
+      : mpl::true_
+    {};
 
 }}
 
Modified: branches/proto/v3/boost/xpressive/proto/transform/call.hpp
==============================================================================
--- branches/proto/v3/boost/xpressive/proto/transform/call.hpp	(original)
+++ branches/proto/v3/boost/xpressive/proto/transform/call.hpp	2007-12-02 19:30:57 EST (Sun, 02 Dec 2007)
@@ -135,7 +135,7 @@
         }
         
         template<typename Fun, typename... Args>
-        struct call : raw_transform
+        struct call : transform_base
         {
             template<typename Sig>
             struct result;
@@ -157,7 +157,7 @@
         };
         
         template<typename Fun, typename Arg0>
-        struct call<Fun, Arg0> : raw_transform
+        struct call<Fun, Arg0> : transform_base
         {
             template<typename Sig>
             struct result;
@@ -185,7 +185,7 @@
         };
         
         template<typename Fun, typename Arg0, typename Arg1>
-        struct call<Fun, Arg0, Arg1> : raw_transform
+        struct call<Fun, Arg0, Arg1> : transform_base
         {
             template<typename Sig>
             struct result;
@@ -213,7 +213,7 @@
         };
         
         template<typename Fun, typename Arg0, typename Arg1, typename Arg2>
-        struct call<Fun, Arg0, Arg1, Arg2> : raw_transform
+        struct call<Fun, Arg0, Arg1, Arg2> : transform_base
         {
             template<typename Sig>
             struct result;
@@ -250,10 +250,9 @@
     }
 
     template<typename Fun, typename... Args>
-    struct transform_category<transform::call<Fun, Args...> >
-    {
-        typedef raw_transform type;
-    };
+    struct is_transform<transform::call<Fun, Args...> >
+      : mpl::true_
+    {};
 
 }}
 
Modified: branches/proto/v3/boost/xpressive/proto/transform/fold.hpp
==============================================================================
--- branches/proto/v3/boost/xpressive/proto/transform/fold.hpp	(original)
+++ branches/proto/v3/boost/xpressive/proto/transform/fold.hpp	2007-12-02 19:30:57 EST (Sun, 02 Dec 2007)
@@ -58,7 +58,7 @@
                 Visitor &v_;
             };
 
-            struct reverse : function_transform
+            struct reverse : transform_base
             {
                 template<typename Sig> struct result;
 
@@ -78,7 +78,7 @@
         } // namespace detail
 
         template<typename Sequence, typename State0, typename Fun>
-        struct fold : raw_transform
+        struct fold : transform_base
         {
             template<typename Sig>
             struct result;
@@ -113,16 +113,14 @@
     }
 
     template<typename Sequence, typename State, typename Fun>
-    struct transform_category<transform::fold<Sequence, State, Fun> >
-    {
-        typedef raw_transform type;
-    };
+    struct is_transform<transform::fold<Sequence, State, Fun> >
+      : mpl::true_
+    {};
 
     template<typename Sequence, typename State, typename Fun>
-    struct transform_category<transform::reverse_fold<Sequence, State, Fun> >
-    {
-        typedef raw_transform type;
-    };
+    struct is_transform<transform::reverse_fold<Sequence, State, Fun> >
+      : mpl::true_
+    {};
 
 }}
 
Modified: branches/proto/v3/boost/xpressive/proto/transform/fold_tree.hpp
==============================================================================
--- branches/proto/v3/boost/xpressive/proto/transform/fold_tree.hpp	(original)
+++ branches/proto/v3/boost/xpressive/proto/transform/fold_tree.hpp	2007-12-02 19:30:57 EST (Sun, 02 Dec 2007)
@@ -44,7 +44,7 @@
 
         template<typename Sequence, typename State0, typename Fun>
         struct fold_tree
-          : raw_transform
+          : transform_base
         {
             template<typename Sig>
             struct result;
@@ -75,7 +75,7 @@
 
         template<typename Sequence, typename State0, typename Fun>
         struct reverse_fold_tree
-          : raw_transform
+          : transform_base
         {
             template<typename Sig>
             struct result;
@@ -106,28 +106,24 @@
     }
 
     template<typename Sequence, typename State0, typename Fun>
-    struct transform_category<transform::fold_tree<Sequence, State0, Fun> >
-    {
-        typedef raw_transform type;
-    };
+    struct is_transform<transform::fold_tree<Sequence, State0, Fun> >
+      : mpl::true_
+    {};
 
     template<typename Grammar, typename Fun>
-    struct transform_category<transform::detail::fold_tree_<Grammar, Fun> >
-    {
-        typedef raw_transform type;
-    };
+    struct is_transform<transform::detail::fold_tree_<Grammar, Fun> >
+      : mpl::true_
+    {};
 
     template<typename Sequence, typename State0, typename Fun>
-    struct transform_category<transform::reverse_fold_tree<Sequence, State0, Fun> >
-    {
-        typedef raw_transform type;
-    };
+    struct is_transform<transform::reverse_fold_tree<Sequence, State0, Fun> >
+      : mpl::true_
+    {};
 
     template<typename Grammar, typename Fun>
-    struct transform_category<transform::detail::reverse_fold_tree_<Grammar, Fun> >
-    {
-        typedef raw_transform type;
-    };
+    struct is_transform<transform::detail::reverse_fold_tree_<Grammar, Fun> >
+      : mpl::true_
+    {};
 
 }}
 
Modified: branches/proto/v3/boost/xpressive/proto/transform/when.hpp
==============================================================================
--- branches/proto/v3/boost/xpressive/proto/transform/when.hpp	(original)
+++ branches/proto/v3/boost/xpressive/proto/transform/when.hpp	2007-12-02 19:30:57 EST (Sun, 02 Dec 2007)
@@ -34,46 +34,36 @@
     namespace detail
     {
         template<typename T, typename EnableIf = void>
-        struct transform_category2_
-        {
-            typedef no_transform type;
-        };
-
-        template<typename T>
-        struct transform_category2_<T, typename T::proto_raw_transform_>
-        {
-            typedef raw_transform type;
-        };
+        struct is_transform2_
+          : mpl::false_
+        {};
 
         template<typename T>
-        struct transform_category2_<T, typename T::proto_function_transform_>
-        {
-            typedef function_transform type;
-        };
+        struct is_transform2_<T, typename T::proto_is_transform_>
+          : mpl::true_
+        {};
 
         template<typename T>
-        struct transform_category_
-          : transform_category2_<T>
+        struct is_transform_
+          : is_transform2_<T>
         {};
 
         template<template<typename...> class T, typename... Args>
-        struct transform_category_<T<Args...> >
-        {
-            typedef no_transform type;
-        };
+        struct is_transform_<T<Args...> >
+          : mpl::false_
+        {};
     }
 
     template<typename T>
-    struct transform_category
-      : proto::detail::transform_category_<T>
+    struct is_transform
+      : proto::detail::is_transform_<T>
     {};
 
     // work around GCC bug
     template<typename Tag, typename Args, long N>
-    struct transform_category<expr<Tag, Args, N> >
-    {
-        typedef no_transform type;
-    };
+    struct is_transform<expr<Tag, Args, N> >
+      : mpl::false_
+    {};
 
     namespace transform
     {
@@ -110,7 +100,7 @@
             };
 
             template<typename R, typename Expr, typename State, typename Visitor
-                , typename Category = typename transform_category<R>::type
+                , bool IsTransform = is_transform<R>::value
             >
             struct apply_lambda_;
 
@@ -130,28 +120,28 @@
             {};
 
             template<typename R, typename Expr, typename State, typename Visitor>
-            struct apply_lambda_<R, Expr, State, Visitor, no_transform>
+            struct apply_lambda_<R, Expr, State, Visitor, false>
               : apply_lambda_aux_<R, Expr, State, Visitor>
             {};
 
             template<typename R, typename Expr, typename State, typename Visitor>
-            struct apply_lambda_<R, Expr, State, Visitor, raw_transform>
+            struct apply_lambda_<R, Expr, State, Visitor, true>
               : boost::result_of<R(Expr, State, Visitor)>
             {};
 
             template<typename R, typename... Args, typename Expr, typename State, typename Visitor>
-            struct apply_lambda_<R(Args...), Expr, State, Visitor, no_transform>
+            struct apply_lambda_<R(Args...), Expr, State, Visitor, false>
               : boost::result_of<when<_, R(Args...)>(Expr, State, Visitor)>
             {};
 
             template<typename R, typename... Args, typename Expr, typename State, typename Visitor>
-            struct apply_lambda_<R(*)(Args...), Expr, State, Visitor, no_transform>
+            struct apply_lambda_<R(*)(Args...), Expr, State, Visitor, false>
               : boost::result_of<when<_, R(*)(Args...)>(Expr, State, Visitor)>
             {};
 
             // work around GCC bug
             template<typename Tag, typename Args, long N, typename Expr, typename State, typename Visitor>
-            struct apply_lambda_<expr<Tag, Args, N>, Expr, State, Visitor, no_transform>
+            struct apply_lambda_<expr<Tag, Args, N>, Expr, State, Visitor, false>
             {
                 typedef expr<Tag, Args, N> type;
                 typedef void not_applied_;
@@ -182,7 +172,7 @@
                 typename Expr
               , typename State
               , typename Visitor
-              , typename TransformCategory
+              , bool IsTransform
               , typename Return
               , typename... Args
             >
@@ -192,51 +182,30 @@
 
                 // If the result of applying the lambda on the return type is a transform,
                 // apply the transform rather than trying to construct it.
-                typedef typename proto::detail::transform_category2_<lambda_type>::type lambda_category;
-
                 typedef
                     typename mpl::eval_if<
-                        is_same<no_transform, lambda_category>
+                        proto::detail::is_transform2_<lambda_type>
+                      , apply<Expr, State, Visitor, true, lambda_type, Args...>
                       , mpl::identity<lambda_type>
-                      , apply<Expr, State, Visitor, lambda_category, lambda_type, Args...>
                     >::type
                 type;
 
                 static type call(Expr const &expr, State const &state, Visitor &visitor)
                 {
-                    return apply::call_(expr, state, visitor, is_same<no_transform, lambda_category>());
+                    return apply::call_(expr, state, visitor, proto::detail::is_transform2_<lambda_type>());
                 }
 
             private:
-                static type call_(Expr const &expr, State const &state, Visitor &visitor, mpl::true_)
+                static type call_(Expr const &expr, State const &state, Visitor &visitor, mpl::false_)
                 {
                     return detail::construct_<type>(
                         when<_, Args>()(expr, state, visitor)...
                     );
                 }
 
-                static type call_(Expr const &expr, State const &state, Visitor &visitor, mpl::false_)
-                {
-                    return apply<Expr, State, Visitor, lambda_category, lambda_type, Args...>::call(expr, state, visitor);
-                }
-            };
-
-            template<
-                typename Expr
-              , typename State
-              , typename Visitor
-              , typename Return
-              , typename... Args
-            >
-            struct apply<Expr, State, Visitor, function_transform, Return, Args...>
-            {
-                typedef typename boost::result_of<
-                    transform::call<Return, Args...>(Expr, State, Visitor)
-                >::type type;
-
-                static type call(Expr const &expr, State const &state, Visitor &visitor)
+                static type call_(Expr const &expr, State const &state, Visitor &visitor, mpl::true_)
                 {
-                    return transform::call<Return, Args...>()(expr, state, visitor);
+                    return apply<Expr, State, Visitor, true, lambda_type, Args...>::call(expr, state, visitor);
                 }
             };
 
@@ -247,7 +216,7 @@
               , typename Return
               , typename... Args
             >
-            struct apply<Expr, State, Visitor, raw_transform, Return, Args...>
+            struct apply<Expr, State, Visitor, true, Return, Args...>
             {
                 typedef typename boost::result_of<
                     transform::call<Return, Args...>(Expr, State, Visitor)
@@ -275,7 +244,7 @@
         // (possibly lambda) type and constructor arguments.
         template<typename Grammar, typename Return, typename... Args>
         struct when<Grammar, Return(Args...)>
-          : raw_transform
+          : transform_base
         {
             typedef typename Grammar::proto_base_expr proto_base_expr;
 
@@ -284,7 +253,7 @@
 
             template<typename This, typename Expr, typename State, typename Visitor>
             struct result<This(Expr, State, Visitor)>
-              : detail::apply<Expr, State, Visitor, typename transform_category<Return>::type, Return, Args...>
+              : detail::apply<Expr, State, Visitor, is_transform<Return>::value, Return, Args...>
             {};
 
             // BUGBUG makes a temporary
@@ -298,7 +267,7 @@
 
         template<typename Grammar, typename Return, typename... Args>
         struct when<Grammar, Return(*)(Args...)>
-          : raw_transform
+          : transform_base
         {
             typedef typename Grammar::proto_base_expr proto_base_expr;
 
@@ -307,7 +276,7 @@
 
             template<typename This, typename Expr, typename State, typename Visitor>
             struct result<This(Expr, State, Visitor)>
-              : detail::apply<Expr, State, Visitor, typename transform_category<Return>::type, Return, Args...>
+              : detail::apply<Expr, State, Visitor, is_transform<Return>::value, Return, Args...>
             {};
 
             template<typename Expr, typename State, typename Visitor>
Modified: branches/proto/v3/libs/xpressive/proto/example/mixed.cpp
==============================================================================
--- branches/proto/v3/libs/xpressive/proto/example/mixed.cpp	(original)
+++ branches/proto/v3/libs/xpressive/proto/example/mixed.cpp	2007-12-02 19:30:57 EST (Sun, 02 Dec 2007)
@@ -39,7 +39,7 @@
     Iter it;
 };
 
-struct begin : proto::function_transform
+struct begin : proto::transform_base
 {
     template<class Sig> struct result;
     template<class This, class Cont>
Modified: branches/proto/v3/libs/xpressive/proto/example/vec3.cpp
==============================================================================
--- branches/proto/v3/libs/xpressive/proto/example/vec3.cpp	(original)
+++ branches/proto/v3/libs/xpressive/proto/example/vec3.cpp	2007-12-02 19:30:57 EST (Sun, 02 Dec 2007)
@@ -62,7 +62,7 @@
 };
 
 struct one : mpl::int_<1> {};
-struct iplus : std::plus<int>, function_transform {};
+struct iplus : std::plus<int>, transform_base {};
 
 // Here is a transform that does the same thing as the above context.
 // It demonstrates the use of the std::plus<> function object
Modified: branches/proto/v3/libs/xpressive/proto/test/examples.cpp
==============================================================================
--- branches/proto/v3/libs/xpressive/proto/test/examples.cpp	(original)
+++ branches/proto/v3/libs/xpressive/proto/test/examples.cpp	2007-12-02 19:30:57 EST (Sun, 02 Dec 2007)
@@ -61,10 +61,10 @@
 // child expression.
 struct unary_arity
   /*<< Custom transforms should inherit from
-  raw_transform. In some cases, (e.g., when the transform
+  transform_base. In some cases, (e.g., when the transform
   is a template), it is also necessary to specialize 
-  the proto::transform_category<> trait. >>*/
-  : raw_transform
+  the proto::is_transform<> trait. >>*/
+  : transform_base
 {
     template<typename Sig>
     struct result;
@@ -100,7 +100,7 @@
   transform_base. In some cases, (e.g., when the transform
   is a template), it is also necessary to specialize 
   the proto::is_transform<> trait. >>*/
-  : raw_transform
+  : transform_base
 {
     template<typename Sig>
     struct result;
Modified: branches/proto/v3/libs/xpressive/proto/test/main.cpp
==============================================================================
--- branches/proto/v3/libs/xpressive/proto/test/main.cpp	(original)
+++ branches/proto/v3/libs/xpressive/proto/test/main.cpp	2007-12-02 19:30:57 EST (Sun, 02 Dec 2007)
@@ -47,7 +47,7 @@
 struct pair
 {};
 
-struct make_negate : function_transform
+struct make_negate : transform_base
 {
     template<typename Sig> struct result;
 
@@ -65,7 +65,7 @@
     }
 };
 
-//struct make_cons : function_transform
+//struct make_cons : transform_base
 //{
 //    template<typename Sig> struct result;
 //