$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: joel_at_[hidden]
Date: 2008-04-17 20:59:39
Author: djowel
Date: 2008-04-17 20:59:39 EDT (Thu, 17 Apr 2008)
New Revision: 44526
URL: http://svn.boost.org/trac/boost/changeset/44526
Log:
action-dispatch tweaks for phoenix special handling
Text files modified: 
   trunk/boost/spirit/home/support/detail/action_dispatch.hpp |    50 ++++++++++++++++++++++++++++++++++++++++
   1 files changed, 50 insertions(+), 0 deletions(-)
Modified: trunk/boost/spirit/home/support/detail/action_dispatch.hpp
==============================================================================
--- trunk/boost/spirit/home/support/detail/action_dispatch.hpp	(original)
+++ trunk/boost/spirit/home/support/detail/action_dispatch.hpp	2008-04-17 20:59:39 EDT (Thu, 17 Apr 2008)
@@ -10,6 +10,7 @@
 #define BOOST_SPIRIT_ACTION_DISPATCH_APR_18_2008_0720AM
 
 #include <boost/spirit/home/support/detail/values.hpp>
+#include <boost/spirit/home/phoenix/core/actor.hpp>
 
 namespace boost { namespace spirit { namespace detail
 {
@@ -17,6 +18,15 @@
     bool action_dispatch(F const& f, Attribute& attr, Context& context)
     {
         bool pass = true;
+        f(attr, context, pass);
+        return pass;
+    }
+
+    template <typename Eval, typename Attribute, typename Context>
+    bool action_dispatch(phoenix::actor<Eval> const& f
+      , Attribute& attr, Context& context)
+    {
+        bool pass = true;
         f(pass_value<Attribute>::call(attr), context, pass);
         return pass;
     }
@@ -26,7 +36,9 @@
     bool action_dispatch(RT(*f)(A0&, A1&, A2&)
       , Attribute& attr, Context& context)
     {
+        bool pass = true;
         f(attr, context, pass);
+        return pass;
     }
 
     template <typename RT, typename A0, typename A1, typename A2
@@ -34,7 +46,45 @@
     bool action_dispatch(RT(&f)(A0&, A1&, A2&)
       , Attribute& attr, Context& context)
     {
+        bool pass = true;
         f(attr, context, pass);
+        return pass;
+    }
+
+    template <typename RT, typename A0, typename A1
+      , typename Attribute, typename Context>
+    bool action_dispatch(RT(*f)(A0&, A1&)
+      , Attribute& attr, Context& context)
+    {
+        f(attr, context);
+        return true;
+    }
+
+    template <typename RT, typename A0, typename A1
+      , typename Attribute, typename Context>
+    bool action_dispatch(RT(&f)(A0&, A1&)
+      , Attribute& attr, Context& context)
+    {
+        f(attr, context);
+        return true;
+    }
+
+    template <typename RT, typename A0
+      , typename Attribute, typename Context>
+    bool action_dispatch(RT(*f)(A0&)
+      , Attribute& attr, Context& context)
+    {
+        f(attr);
+        return true;
+    }
+
+    template <typename RT, typename A0
+      , typename Attribute, typename Context>
+    bool action_dispatch(RT(&f)(A0&)
+      , Attribute& attr, Context& context)
+    {
+        f(attr);
+        return true;
     }
 }}}