$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: eric_at_[hidden]
Date: 2007-12-03 00:14:19
Author: eric_niebler
Date: 2007-12-03 00:14:18 EST (Mon, 03 Dec 2007)
New Revision: 41632
URL: http://svn.boost.org/trac/boost/changeset/41632
Log:
temporary hack for is_transform
Text files modified: 
   branches/proto/v3/boost/xpressive/detail/static/grammar.hpp |     6 +++---                                  
   branches/proto/v3/boost/xpressive/proto/transform/when.hpp  |    35 +++++++++++++++++++++++++++++++++--     
   2 files changed, 36 insertions(+), 5 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-03 00:14:18 EST (Mon, 03 Dec 2007)
@@ -324,12 +324,12 @@
         //  matches expressions like (set= 'a','b','c')
         //  calculates the size of the set
         //  populates an array of characters
-        template<typename Char>
+        template<typename Char, typename Dummy = transform_base>
         struct ListSet
           : or_<
                 when<
                     comma<ListSet<Char>, CharLiteral<Char> >
-                  , mpl::next<call<ListSet<Char>(_left)> >()
+                  , mpl::next<ListSet<Char>(_left)>()
                 >
               , when<
                     assign<terminal<set_initializer>, CharLiteral<Char> >
@@ -608,7 +608,7 @@
             struct as_list_set
               : call<
                     fill_list_set(
-                        set_matcher<traits(_visitor), call<ListSet<Char> > >()
+                        set_matcher<traits(_visitor), ListSet<Char> >()
                       , _
                       , _visitor
                     )
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-03 00:14:18 EST (Mon, 03 Dec 2007)
@@ -31,6 +31,38 @@
 
     namespace detail
     {
+        template<typename... Args>
+        struct back;
+
+        template<typename A0>
+        struct back<A0>
+        {
+            typedef A0 type;
+        };
+
+        template<typename A0, typename A1>
+        struct back<A0, A1>
+        {
+            typedef A1 type;
+        };
+
+        template<typename A0, typename A1, typename A2>
+        struct back<A0, A1, A2>
+        {
+            typedef A2 type;
+        };
+
+        template<typename A0, typename A1, typename A2, typename A3>
+        struct back<A0, A1, A2, A3>
+        {
+            typedef A3 type;
+        };
+
+        template<typename A0, typename A1, typename A2, typename A3, typename... Rest>
+        struct back<A0, A1, A2, A3, Rest...>
+          : back<Rest...>
+        {};
+
         template<typename T, typename EnableIf = void>
         struct is_transform2_
           : mpl::false_
@@ -48,7 +80,7 @@
 
         template<template<typename...> class T, typename... Args>
         struct is_transform_<T<Args...> >
-          : mpl::false_
+          : is_same<typename back<Args...>::type, transform_base>
         {};
     }
 
@@ -67,7 +99,6 @@
     {
         namespace detail
         {
-            // can't this apply template be always used? What is the purpose of the one below?
             template<
                 typename Expr
               , typename State