$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r58686 - sandbox/msm/boost/msm/front/euml
From: christophe.j.henry_at_[hidden]
Date: 2010-01-04 15:00:07
Author: chenry
Date: 2010-01-04 15:00:06 EST (Mon, 04 Jan 2010)
New Revision: 58686
URL: http://svn.boost.org/trac/boost/changeset/58686
Log:
replaced most enable_if by tenplate specialization (easier on compilers)
Text files modified: 
   sandbox/msm/boost/msm/front/euml/common.hpp    |   174 +++-------                              
   sandbox/msm/boost/msm/front/euml/container.hpp |   637 +++++++++++++-------------------------- 
   2 files changed, 280 insertions(+), 531 deletions(-)
Modified: sandbox/msm/boost/msm/front/euml/common.hpp
==============================================================================
--- sandbox/msm/boost/msm/front/euml/common.hpp	(original)
+++ sandbox/msm/boost/msm/front/euml/common.hpp	2010-01-04 15:00:06 EST (Mon, 04 Jan 2010)
@@ -503,13 +503,8 @@
 };
 GetFsm_Helper const fsm_;
 
-template <class StateName,class Param1=void, class Enable=void >                                             
-struct SubState_ : euml_action<SubState_<StateName,Param1,Enable> > {};        
-
 template <class StateName,class Param1>
-struct SubState_ <StateName,Param1
-    , typename ::boost::enable_if<typename ::boost::is_same<Param1,void>::type >::type>
-    : euml_action<SubState_<StateName, Param1 > >
+struct SubState_ : euml_action<SubState_<StateName, Param1> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -525,23 +520,19 @@
     typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
 
     template <class EVT,class FSM,class SourceState,class TargetState>
-    StateName& operator()(EVT const&,FSM& fsm,SourceState& ,TargetState& )const
+    StateName& operator()(EVT const& evt,FSM& fsm,SourceState& src,TargetState& tgt)const
     {
-        return fsm.template get_state<StateName&>();
+        return (Param1()(evt,fsm,src,tgt)).template get_state<StateName&>();
     }
     template <class Event,class FSM,class STATE>
-    StateName& operator()(Event const& ,FSM& fsm,STATE&  )const
+    StateName& operator()(Event const& evt,FSM& fsm,STATE&  state)const
     {
-        return fsm.template get_state<StateName&>();
+        return (Param1()(evt,fsm,state)).template get_state<StateName&>();
     }
 };
-
-template <class StateName,class Param1>
-struct SubState_ <StateName,Param1
-    , typename ::boost::disable_if<
-            typename ::boost::is_same<Param1,void>::type
-            >::type>
-    : euml_action<SubState_<StateName, Param1> >
+template <class StateName>
+struct SubState_ <StateName,void>
+    : euml_action<SubState_<StateName, void > >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -557,16 +548,17 @@
     typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
 
     template <class EVT,class FSM,class SourceState,class TargetState>
-    StateName& operator()(EVT const& evt,FSM& fsm,SourceState& src,TargetState& tgt)const
+    StateName& operator()(EVT const&,FSM& fsm,SourceState& ,TargetState& )const
     {
-        return (Param1()(evt,fsm,src,tgt)).template get_state<StateName&>();
+        return fsm.template get_state<StateName&>();
     }
     template <class Event,class FSM,class STATE>
-    StateName& operator()(Event const& evt,FSM& fsm,STATE&  state)const
+    StateName& operator()(Event const& ,FSM& fsm,STATE&  )const
     {
-        return (Param1()(evt,fsm,state)).template get_state<StateName&>();
+        return fsm.template get_state<StateName&>();
     }
 };
+
 struct substate_tag {};
 struct SubState_Helper: proto::extends< proto::terminal<substate_tag>::type, SubState_Helper, sm_domain>
 {
@@ -1004,13 +996,8 @@
     }
 };
 
-template <class ToProcessEvt,class Param1=void, class Param2=void, class Param3=void, class Param4=void, class Enable=void >                                             
-struct Process_ : euml_action<Process_<ToProcessEvt,Param1,Param2,Param3,Param4,Enable> > {};        
-
 template <class ToProcessEvt,class Param1, class Param2, class Param3, class Param4>
-struct Process_ <ToProcessEvt,Param1,Param2,Param3,Param4
-    , typename ::boost::enable_if<typename ::boost::is_same<Param1,void>::type >::type>
-    : euml_action<Process_<ToProcessEvt, Param1, Param2, Param3, Param4 > >
+struct Process_ : euml_action<Process_<ToProcessEvt, Param1, Param2, Param3, Param4> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -1026,26 +1013,25 @@
     typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
 
     template <class EVT,class FSM,class SourceState,class TargetState>
-    void operator()(EVT const&,FSM& fsm,SourceState& ,TargetState& )const
+    void operator()(EVT const& evt,FSM& fsm,SourceState& src,TargetState& tgt)const
     {
-        fsm.process_event(ToProcessEvt());
+        (Param1()(evt,fsm,src,tgt)).process_event(ToProcessEvt());
+        (Param2()(evt,fsm,src,tgt)).process_event(ToProcessEvt());
+        (Param3()(evt,fsm,src,tgt)).process_event(ToProcessEvt());
+        (Param4()(evt,fsm,src,tgt)).process_event(ToProcessEvt());
     }
     template <class Event,class FSM,class STATE>
-    void operator()(Event const& ,FSM& fsm,STATE&  )const
+    void operator()(Event const& evt,FSM& fsm,STATE&  state)const
     {
-        fsm.process_event(ToProcessEvt());
+        (Param1()(evt,fsm,state)).process_event(ToProcessEvt());
+        (Param2()(evt,fsm,state)).process_event(ToProcessEvt());
+        (Param3()(evt,fsm,state)).process_event(ToProcessEvt());
+        (Param4()(evt,fsm,state)).process_event(ToProcessEvt());
     }
 };
-
-template <class ToProcessEvt,class Param1, class Param2, class Param3, class Param4>
-struct Process_ <ToProcessEvt,Param1,Param2,Param3,Param4
-    , typename ::boost::disable_if<
-        typename ::boost::mpl::or_<
-            typename ::boost::is_same<Param1,void>::type,
-            typename ::boost::mpl::not_<typename ::boost::is_same<Param2,void>::type>::type
-            >::type
-    >::type>
-    : euml_action<Process_<ToProcessEvt, Param1, Param2, Param3, Param4> >
+template <class ToProcessEvt>
+struct Process_ <ToProcessEvt,void,void,void,void>
+    : euml_action<Process_<ToProcessEvt, void, void, void, void > >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -1061,26 +1047,20 @@
     typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
 
     template <class EVT,class FSM,class SourceState,class TargetState>
-    void operator()(EVT const& evt,FSM& fsm,SourceState& src,TargetState& tgt)const
+    void operator()(EVT const&,FSM& fsm,SourceState& ,TargetState& )const
     {
-        (Param1()(evt,fsm,src,tgt)).process_event(ToProcessEvt());
+        fsm.process_event(ToProcessEvt());
     }
     template <class Event,class FSM,class STATE>
-    void operator()(Event const& evt,FSM& fsm,STATE&  state)const
+    void operator()(Event const& ,FSM& fsm,STATE&  )const
     {
-        (Param1()(evt,fsm,state)).process_event(ToProcessEvt());
+        fsm.process_event(ToProcessEvt());
     }
 };
 
-template <class ToProcessEvt,class Param1, class Param2, class Param3, class Param4>
-struct Process_ <ToProcessEvt,Param1,Param2,Param3,Param4
-    , typename ::boost::disable_if<
-        typename ::boost::mpl::or_<
-            typename ::boost::is_same<Param2,void>::type,
-            typename ::boost::mpl::not_<typename ::boost::is_same<Param3,void>::type>::type
-            >::type
-    >::type>
-    : euml_action<Process_<ToProcessEvt, Param1, Param2, Param3, Param4> >
+template <class ToProcessEvt,class Param1>
+struct Process_ <ToProcessEvt,Param1,void,void,void>
+    : euml_action<Process_<ToProcessEvt, Param1, void, void, void> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -1099,25 +1079,17 @@
     void operator()(EVT const& evt,FSM& fsm,SourceState& src,TargetState& tgt)const
     {
         (Param1()(evt,fsm,src,tgt)).process_event(ToProcessEvt());
-        (Param2()(evt,fsm,src,tgt)).process_event(ToProcessEvt());
     }
     template <class Event,class FSM,class STATE>
     void operator()(Event const& evt,FSM& fsm,STATE&  state)const
     {
         (Param1()(evt,fsm,state)).process_event(ToProcessEvt());
-        (Param2()(evt,fsm,state)).process_event(ToProcessEvt());
     }
 };
 
-template <class ToProcessEvt,class Param1, class Param2, class Param3, class Param4>
-struct Process_ <ToProcessEvt,Param1,Param2,Param3,Param4
-    , typename ::boost::disable_if<
-        typename ::boost::mpl::or_<
-            typename ::boost::is_same<Param3,void>::type,
-            typename ::boost::mpl::not_<typename ::boost::is_same<Param4,void>::type>::type
-            >::type
-    >::type>
-    : euml_action<Process_<ToProcessEvt, Param1, Param2, Param3, Param4> >
+template <class ToProcessEvt,class Param1, class Param2>
+struct Process_ <ToProcessEvt,Param1,Param2,void,void>
+    : euml_action<Process_<ToProcessEvt, Param1, Param2, void, void> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -1137,23 +1109,18 @@
     {
         (Param1()(evt,fsm,src,tgt)).process_event(ToProcessEvt());
         (Param2()(evt,fsm,src,tgt)).process_event(ToProcessEvt());
-        (Param3()(evt,fsm,src,tgt)).process_event(ToProcessEvt());
     }
     template <class Event,class FSM,class STATE>
     void operator()(Event const& evt,FSM& fsm,STATE&  state)const
     {
         (Param1()(evt,fsm,state)).process_event(ToProcessEvt());
         (Param2()(evt,fsm,state)).process_event(ToProcessEvt());
-        (Param3()(evt,fsm,state)).process_event(ToProcessEvt());
     }
 };
 
-template <class ToProcessEvt,class Param1, class Param2, class Param3, class Param4>
-struct Process_ <ToProcessEvt,Param1,Param2,Param3,Param4
-    , typename ::boost::disable_if<
-            typename ::boost::is_same<Param4,void>::type
-            >::type>
-    : euml_action<Process_<ToProcessEvt, Param1, Param2, Param3, Param4> >
+template <class ToProcessEvt,class Param1, class Param2, class Param3>
+struct Process_ <ToProcessEvt,Param1,Param2,Param3,void>
+    : euml_action<Process_<ToProcessEvt, Param1, Param2, Param3, void> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -1174,7 +1141,6 @@
         (Param1()(evt,fsm,src,tgt)).process_event(ToProcessEvt());
         (Param2()(evt,fsm,src,tgt)).process_event(ToProcessEvt());
         (Param3()(evt,fsm,src,tgt)).process_event(ToProcessEvt());
-        (Param4()(evt,fsm,src,tgt)).process_event(ToProcessEvt());
     }
     template <class Event,class FSM,class STATE>
     void operator()(Event const& evt,FSM& fsm,STATE&  state)const
@@ -1182,7 +1148,6 @@
         (Param1()(evt,fsm,state)).process_event(ToProcessEvt());
         (Param2()(evt,fsm,state)).process_event(ToProcessEvt());
         (Param3()(evt,fsm,state)).process_event(ToProcessEvt());
-        (Param4()(evt,fsm,state)).process_event(ToProcessEvt());
     }
 };
 struct process_tag {};
@@ -1201,14 +1166,8 @@
 };
 Process_Helper const process_;
 
-#if (!defined(BOOST_MSVC)||(BOOST_MSVC>1400))
-template <class ToProcessEvt,class Value,class Param1=void, class Param2=void, class Param3=void, class Enable=void >                                             
-struct Process2_ : euml_action<Process2_<ToProcessEvt,Value,Param1,Param2,Param3,Enable> > {};        
-
 template <class ToProcessEvt,class Value,class Param1, class Param2, class Param3>
-struct Process2_ <ToProcessEvt,Value,Param1,Param2,Param3
-    , typename ::boost::enable_if<typename ::boost::is_same<Param1,void>::type >::type>
-    : euml_action<Process2_<ToProcessEvt,Value, Param1, Param2, Param3 > >
+struct Process2_ : euml_action<Process2_<ToProcessEvt,Value, Param1, Param2, Param3> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -1226,24 +1185,22 @@
     template <class EVT,class FSM,class SourceState,class TargetState>
     void operator()(EVT const& evt,FSM& fsm,SourceState& src,TargetState& tgt)const
     {
-        fsm.process_event(ToProcessEvt(Value()(evt,fsm,src,tgt)));
+        (Param1()(evt,fsm,src,tgt)).process_event(ToProcessEvt(Value()(evt,fsm,src,tgt)));
+        (Param2()(evt,fsm,src,tgt)).process_event(ToProcessEvt(Value()(evt,fsm,src,tgt)));
+        (Param3()(evt,fsm,src,tgt)).process_event(ToProcessEvt(Value()(evt,fsm,src,tgt)));
     }
     template <class Event,class FSM,class STATE>
     void operator()(Event const& evt,FSM& fsm,STATE&  state)const
     {
-        fsm.process_event(ToProcessEvt(Value()(evt,fsm,state)));
+        (Param1()(evt,fsm,state)).process_event(ToProcessEvt(Value()(evt,fsm,state)));
+        (Param2()(evt,fsm,state)).process_event(ToProcessEvt(Value()(evt,fsm,state)));
+        (Param3()(evt,fsm,state)).process_event(ToProcessEvt(Value()(evt,fsm,state)));
     }
 };
 
-template <class ToProcessEvt,class Value,class Param1, class Param2, class Param3>
-struct Process2_ <ToProcessEvt,Value,Param1,Param2,Param3
-    , typename ::boost::disable_if<
-        typename ::boost::mpl::or_<
-            typename ::boost::is_same<Param1,void>::type,
-            typename ::boost::mpl::not_<typename ::boost::is_same<Param2,void>::type>::type
-            >::type
-    >::type>
-    : euml_action<Process2_<ToProcessEvt,Value, Param1, Param2, Param3> >
+template <class ToProcessEvt,class Value>
+struct Process2_ <ToProcessEvt,Value,void,void,void>
+    : euml_action<Process2_<ToProcessEvt,Value, void, void, void > >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -1261,24 +1218,18 @@
     template <class EVT,class FSM,class SourceState,class TargetState>
     void operator()(EVT const& evt,FSM& fsm,SourceState& src,TargetState& tgt)const
     {
-        (Param1()(evt,fsm,src,tgt)).process_event(ToProcessEvt(Value()(evt,fsm,src,tgt)));
+        fsm.process_event(ToProcessEvt(Value()(evt,fsm,src,tgt)));
     }
     template <class Event,class FSM,class STATE>
     void operator()(Event const& evt,FSM& fsm,STATE&  state)const
     {
-        (Param1()(evt,fsm,state)).process_event(ToProcessEvt(Value()(evt,fsm,state)));
+        fsm.process_event(ToProcessEvt(Value()(evt,fsm,state)));
     }
 };
 
-template <class ToProcessEvt,class Value,class Param1, class Param2, class Param3>
-struct Process2_ <ToProcessEvt,Value,Param1,Param2,Param3
-    , typename ::boost::disable_if<
-        typename ::boost::mpl::or_<
-            typename ::boost::is_same<Param2,void>::type,
-            typename ::boost::mpl::not_<typename ::boost::is_same<Param3,void>::type>::type
-            >::type
-    >::type>
-    : euml_action<Process2_<ToProcessEvt,Value, Param1, Param2, Param3> >
+template <class ToProcessEvt,class Value,class Param1>
+struct Process2_ <ToProcessEvt,Value,Param1,void,void>
+    : euml_action<Process2_<ToProcessEvt,Value, Param1, void, void> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -1297,23 +1248,17 @@
     void operator()(EVT const& evt,FSM& fsm,SourceState& src,TargetState& tgt)const
     {
         (Param1()(evt,fsm,src,tgt)).process_event(ToProcessEvt(Value()(evt,fsm,src,tgt)));
-        (Param2()(evt,fsm,src,tgt)).process_event(ToProcessEvt(Value()(evt,fsm,src,tgt)));
     }
     template <class Event,class FSM,class STATE>
     void operator()(Event const& evt,FSM& fsm,STATE&  state)const
     {
         (Param1()(evt,fsm,state)).process_event(ToProcessEvt(Value()(evt,fsm,state)));
-        (Param2()(evt,fsm,state)).process_event(ToProcessEvt(Value()(evt,fsm,state)));
     }
 };
 
-
-template <class ToProcessEvt,class Value,class Param1, class Param2, class Param3>
-struct Process2_ <ToProcessEvt,Value,Param1,Param2,Param3
-    , typename ::boost::disable_if<
-            typename ::boost::is_same<Param3,void>::type
-            >::type>
-    : euml_action<Process2_<ToProcessEvt,Value, Param1, Param2, Param3> >
+template <class ToProcessEvt,class Value,class Param1, class Param2>
+struct Process2_ <ToProcessEvt,Value,Param1,Param2,void>
+    : euml_action<Process2_<ToProcessEvt,Value, Param1, Param2, void> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -1333,14 +1278,12 @@
     {
         (Param1()(evt,fsm,src,tgt)).process_event(ToProcessEvt(Value()(evt,fsm,src,tgt)));
         (Param2()(evt,fsm,src,tgt)).process_event(ToProcessEvt(Value()(evt,fsm,src,tgt)));
-        (Param3()(evt,fsm,src,tgt)).process_event(ToProcessEvt(Value()(evt,fsm,src,tgt)));
     }
     template <class Event,class FSM,class STATE>
     void operator()(Event const& evt,FSM& fsm,STATE&  state)const
     {
         (Param1()(evt,fsm,state)).process_event(ToProcessEvt(Value()(evt,fsm,state)));
         (Param2()(evt,fsm,state)).process_event(ToProcessEvt(Value()(evt,fsm,state)));
-        (Param3()(evt,fsm,state)).process_event(ToProcessEvt(Value()(evt,fsm,state)));
     }
 };
 
@@ -1359,7 +1302,6 @@
     };
 };
 Process2_Helper const process2_;
-#endif
 
 template <class Flag,class Param1=void, class Enable=void >                                             
 struct Get_Flag_ : euml_action<Get_Flag_<Flag,Param1,Enable> > {};        
Modified: sandbox/msm/boost/msm/front/euml/container.hpp
==============================================================================
--- sandbox/msm/boost/msm/front/euml/container.hpp	(original)
+++ sandbox/msm/boost/msm/front/euml/container.hpp	2010-01-04 15:00:06 EST (Mon, 04 Jan 2010)
@@ -999,22 +999,39 @@
 };
 Resize_Helper const resize_;
 
-template <class Container, class Param1, class Param2, class Param3 ,class Enable=void >
-struct Insert_ : euml_action<Insert_<Container,Param1,Param2,Param3,Enable> >
+// version for 3 parameters (sequence containers)
+template <class Container, class Param1, class Param2, class Param3 >
+struct Insert_ : euml_action<Insert_<Container,Param1,Param2,Param3> >
 {
+    template <class Event,class FSM,class STATE >
+    struct state_action_result 
+    {
+        typedef void type;
+    };
+    template <class EVT,class FSM,class SourceState,class TargetState>
+    struct transition_action_result 
+    {
+        typedef void type;
+    };
+    typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
+
+    template <class EVT,class FSM,class SourceState,class TargetState> 
+    void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
+    {
+        (Container()(evt,fsm,src,tgt)).insert(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),
+                                              Param3()(evt,fsm,src,tgt));
+    }
+    template <class Event,class FSM,class STATE>
+    void operator()(Event const& evt,FSM& fsm,STATE& state )const
+    {
+        (Container()(evt,fsm,state)).insert(Param1()(evt,fsm,state),Param2()(evt,fsm,state),
+                                            Param3()(evt,fsm,state));
+    }
 };
 // version for 2 parameters
-template <class Container, class Param1, class Param2, class Param3>
-struct Insert_ < Container,Param1,Param2,Param3,
-                typename ::boost::disable_if< 
-                    typename ::boost::mpl::or_<typename ::boost::is_same<Param2,void>::type,
-                                               typename ::boost::mpl::not_<
-                                                    typename ::boost::is_same<Param3,void>::type
-                                                    >::type 
-                                               >::type 
-                    >::type 
-                >
-    : euml_action<Insert_<Container,Param1,Param2,Param3> >
+template <class Container, class Param1, class Param2>
+struct Insert_ < Container,Param1,Param2,void>
+    : euml_action<Insert_<Container,Param1,Param2,void> >
 {
     // return value will actually not be correct for set::insert(it1,it2), should be void
     // but it's ok as nobody should call an inexistent return type
@@ -1107,47 +1124,10 @@
     }
 };
 
-// version for 3 parameters (sequence containers)
-template <class Container, class Param1, class Param2, class Param3 >
-struct Insert_<Container,Param1,Param2,Param3,
-               typename ::boost::disable_if<
-                            typename ::boost::is_same<Param3,void>::type
-                      >::type 
-                  > 
-                    : euml_action<Insert_<Container,Param1,Param2,Param3> >
-{
-    template <class Event,class FSM,class STATE >
-    struct state_action_result 
-    {
-        typedef void type;
-    };
-    template <class EVT,class FSM,class SourceState,class TargetState>
-    struct transition_action_result 
-    {
-        typedef void type;
-    };
-    typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
-
-    template <class EVT,class FSM,class SourceState,class TargetState> 
-    void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
-    {
-        (Container()(evt,fsm,src,tgt)).insert(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),
-                                              Param3()(evt,fsm,src,tgt));
-    }
-    template <class Event,class FSM,class STATE>
-    void operator()(Event const& evt,FSM& fsm,STATE& state )const
-    {
-        (Container()(evt,fsm,state)).insert(Param1()(evt,fsm,state),Param2()(evt,fsm,state),
-                                            Param3()(evt,fsm,state));
-    }
-};
 // version for 1 parameter (associative containers)
-template <class Container, class Param1, class Param2, class Param3>
-struct Insert_ < Container,Param1,Param2,Param3,
-                 typename ::boost::enable_if< 
-                        typename ::boost::is_same<Param2,void>::type
-                 >::type >
-    : euml_action<Insert_<Container,Param1,Param2,Param3> >
+template <class Container, class Param1>
+struct Insert_ < Container,Param1,void,void>
+    : euml_action<Insert_<Container,Param1,void,void> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -1186,7 +1166,6 @@
         return (Container()(evt,fsm,state)).insert(Param1()(evt,fsm,state));        
     }
 };
-
 struct insert_tag {};
 struct Insert_Helper: proto::extends< proto::terminal<insert_tag>::type, Insert_Helper, sm_domain>
 {
@@ -1632,20 +1611,12 @@
 };
 Splice_Helper const splice_;
 
-template <class Container, class Param1, class Param2, class Param3, class Enable=void >
-struct StringFind_ : euml_action<StringFind_<Container,Param1,Param2,Param3,Enable> >
-{
-};
-
+//template <class Container, class Param1, class Param2, class Param3, class Enable=void >
+//struct StringFind_ : euml_action<StringFind_<Container,Param1,Param2,Param3,Enable> >
+//{
+//};
 template <class Container,class Param1, class Param2, class Param3>
-struct StringFind_ < 
-        Container,Param1,Param2,Param3,
-        typename ::boost::enable_if< 
-                    typename ::boost::is_same<Param2,void>::type
-                    >::type
-                >
-                : euml_action<StringFind_<Container,Param1,Param2,Param3> >
-
+struct StringFind_ : euml_action<StringFind_<Container,Param1,Param2,Param3> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -1665,29 +1636,22 @@
     typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
        operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
     {
-        return (Container()(evt,fsm,src,tgt)).find(Param1()(evt,fsm,src,tgt));
+        return (Container()(evt,fsm,src,tgt)).
+            find(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),Param3()(evt,fsm,src,tgt));
     }
     template <class Event,class FSM,class STATE>
     typename state_action_result<Event,FSM,STATE>::type
         operator()(Event const& evt,FSM& fsm,STATE& state )const
     {
-        return (Container()(evt,fsm,state)).find(Param1()(evt,fsm,state));
+        return (Container()(evt,fsm,state)).
+            find(Param1()(evt,fsm,state),Param2()(evt,fsm,state),Param3()(evt,fsm,state));
     }
 };
 
-template <class Container,class Param1, class Param2, class Param3>
-struct StringFind_ < 
-                Container,Param1,Param2,Param3,
-                    typename ::boost::enable_if<
-                        typename ::boost::mpl::and_<
-                            typename ::boost::is_same<Param3,void>::type,
-                            typename ::boost::mpl::not_<
-                                typename ::boost::is_same<Param2,void>::type
-                                                >::type
-                                             >::type
-                                       >::type
-                    >
-                : euml_action<StringFind_<Container,Param1,Param2,Param3> >
+template <class Container,class Param1>
+struct StringFind_ < Container,Param1,void,void>
+                : euml_action<StringFind_<Container,Param1,void,void> >
+
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -1707,24 +1671,19 @@
     typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
        operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
     {
-        return (Container()(evt,fsm,src,tgt)).find(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
+        return (Container()(evt,fsm,src,tgt)).find(Param1()(evt,fsm,src,tgt));
     }
     template <class Event,class FSM,class STATE>
     typename state_action_result<Event,FSM,STATE>::type
         operator()(Event const& evt,FSM& fsm,STATE& state )const
     {
-        return (Container()(evt,fsm,state)).find(Param1()(evt,fsm,state),Param2()(evt,fsm,state));
+        return (Container()(evt,fsm,state)).find(Param1()(evt,fsm,state));
     }
 };
 
-template <class Container,class Param1, class Param2, class Param3>
-struct StringFind_< 
-    Container,Param1,Param2,Param3,
-            typename ::boost::disable_if< 
-                                typename ::boost::is_same<Param3,void>::type
-                                >::type
-                >
-                : euml_action<StringFind_<Container,Param1,Param2,Param3> >
+template <class Container,class Param1, class Param2>
+struct StringFind_ <Container,Param1,Param2,void>
+                : euml_action<StringFind_<Container,Param1,Param2,void> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -1744,15 +1703,13 @@
     typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
        operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
     {
-        return (Container()(evt,fsm,src,tgt)).
-            find(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),Param3()(evt,fsm,src,tgt));
+        return (Container()(evt,fsm,src,tgt)).find(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
     }
     template <class Event,class FSM,class STATE>
     typename state_action_result<Event,FSM,STATE>::type
         operator()(Event const& evt,FSM& fsm,STATE& state )const
     {
-        return (Container()(evt,fsm,state)).
-            find(Param1()(evt,fsm,state),Param2()(evt,fsm,state),Param3()(evt,fsm,state));
+        return (Container()(evt,fsm,state)).find(Param1()(evt,fsm,state),Param2()(evt,fsm,state));
     }
 };
 
@@ -1910,20 +1867,8 @@
 };
 StringRFind_Helper const string_rfind_;
 
-template <class Container, class Param1, class Param2, class Param3, class Enable=void >
-struct StringFindFirstOf_ : euml_action<StringFindFirstOf_<Container,Param1,Param2,Param3,Enable> >
-{
-};
-
 template <class Container,class Param1, class Param2, class Param3>
-struct StringFindFirstOf_ < 
-        Container,Param1,Param2,Param3,
-        typename ::boost::enable_if< 
-                    typename ::boost::is_same<Param2,void>::type
-                    >::type
-                >
-                : euml_action<StringFindFirstOf_<Container,Param1,Param2,Param3> >
-
+struct StringFindFirstOf_ : euml_action<StringFindFirstOf_<Container,Param1,Param2,Param3> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -1943,29 +1888,20 @@
     typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
        operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
     {
-        return (Container()(evt,fsm,src,tgt)).find_first_of(Param1()(evt,fsm,src,tgt));
+        return (Container()(evt,fsm,src,tgt)).
+            find_first_of(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),Param3()(evt,fsm,src,tgt));
     }
     template <class Event,class FSM,class STATE>
     typename state_action_result<Event,FSM,STATE>::type
         operator()(Event const& evt,FSM& fsm,STATE& state )const
     {
-        return (Container()(evt,fsm,state)).find_first_of(Param1()(evt,fsm,state));
+        return (Container()(evt,fsm,state)).
+            find_first_of(Param1()(evt,fsm,state),Param2()(evt,fsm,state),Param3()(evt,fsm,state));
     }
 };
-
-template <class Container,class Param1, class Param2, class Param3>
-struct StringFindFirstOf_ < 
-                Container,Param1,Param2,Param3,
-                    typename ::boost::enable_if<
-                        typename ::boost::mpl::and_<
-                            typename ::boost::is_same<Param3,void>::type,
-                            typename ::boost::mpl::not_<
-                                typename ::boost::is_same<Param2,void>::type
-                                                >::type
-                                             >::type
-                                       >::type
-                    >
-                : euml_action<StringFindFirstOf_<Container,Param1,Param2,Param3> >
+template <class Container,class Param1>
+struct StringFindFirstOf_ <Container,Param1,void,void>
+                : euml_action<StringFindFirstOf_<Container,Param1,void,void> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -1985,24 +1921,19 @@
     typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
        operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
     {
-        return (Container()(evt,fsm,src,tgt)).find_first_of(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
+        return (Container()(evt,fsm,src,tgt)).find_first_of(Param1()(evt,fsm,src,tgt));
     }
     template <class Event,class FSM,class STATE>
     typename state_action_result<Event,FSM,STATE>::type
         operator()(Event const& evt,FSM& fsm,STATE& state )const
     {
-        return (Container()(evt,fsm,state)).find_first_of(Param1()(evt,fsm,state),Param2()(evt,fsm,state));
+        return (Container()(evt,fsm,state)).find_first_of(Param1()(evt,fsm,state));
     }
 };
 
-template <class Container,class Param1, class Param2, class Param3>
-struct StringFindFirstOf_< 
-    Container,Param1,Param2,Param3,
-            typename ::boost::disable_if< 
-                                typename ::boost::is_same<Param3,void>::type
-                                >::type
-                >
-                : euml_action<StringFindFirstOf_<Container,Param1,Param2,Param3> >
+template <class Container,class Param1, class Param2>
+struct StringFindFirstOf_ <Container,Param1,Param2,void>
+                : euml_action<StringFindFirstOf_<Container,Param1,Param2,void> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -2022,15 +1953,13 @@
     typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
        operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
     {
-        return (Container()(evt,fsm,src,tgt)).
-            find_first_of(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),Param3()(evt,fsm,src,tgt));
+        return (Container()(evt,fsm,src,tgt)).find_first_of(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
     }
     template <class Event,class FSM,class STATE>
     typename state_action_result<Event,FSM,STATE>::type
         operator()(Event const& evt,FSM& fsm,STATE& state )const
     {
-        return (Container()(evt,fsm,state)).
-            find_first_of(Param1()(evt,fsm,state),Param2()(evt,fsm,state),Param3()(evt,fsm,state));
+        return (Container()(evt,fsm,state)).find_first_of(Param1()(evt,fsm,state),Param2()(evt,fsm,state));
     }
 };
 
@@ -2499,18 +2428,45 @@
     }
 };
 
-template <class Container, class Param1, class Param2, class Enable=void >
-struct Associative_Erase_ : euml_action<Associative_Erase_<Container,Param1,Param2,Enable> >
+// version for 2 parameters
+template <class Container, class Param1, class Param2>
+struct Associative_Erase_ : euml_action<Associative_Erase_<Container,Param1,Param2> >
 {
+    template <class Event,class FSM,class STATE >
+    struct state_action_result 
+    {
+        typedef void type;
+    };
+    template <class EVT,class FSM,class SourceState,class TargetState>
+    struct transition_action_result 
+    {
+        typedef void type;
+    };
+    typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
+
+    template <class EVT,class FSM,class SourceState,class TargetState>
+	typename ::boost::enable_if<
+		typename ::boost::mpl::has_key<
+			typename Container::tag_type,action_tag>::type,
+			typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type 
+     operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
+    {
+        (Container()(evt,fsm,src,tgt)).erase(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
+    }
+	template <class Event,class FSM,class STATE>
+	typename ::boost::enable_if<
+		typename ::boost::mpl::has_key<
+			typename Container::tag_type,state_action_tag>::type,
+			typename state_action_result<Event,FSM,STATE>::type >::type 
+     operator()(Event const& evt,FSM& fsm,STATE& state )const
+    {
+        (Container()(evt,fsm,state)).erase(Param1()(evt,fsm,state),Param2()(evt,fsm,state));        
+    }
 };
 // version for 1 parameter
-template <class Container, class Param1, class Param2>
-struct Associative_Erase_ < Container,Param1,Param2,
-                typename ::boost::enable_if< 
-                    typename ::boost::is_same<Param2,void>::type
-                    >::type 
-                >
-    : euml_action<Associative_Erase_<Container,Param1,Param2> >
+template <class Container, class Param1>
+struct Associative_Erase_ < Container,Param1,void>
+    : euml_action<Associative_Erase_<Container,Param1,void> >
 {
     // return value will actually not be correct for set::erase(it), should be void
     // but it's ok as nobody should call an inexistent return type
@@ -2603,48 +2559,6 @@
     }
 };
 
-
-// version for 2 parameters
-template <class Container, class Param1, class Param2>
-struct Associative_Erase_ < Container,Param1,Param2,
-                            typename ::boost::disable_if< 
-                                typename ::boost::is_same<Param2,void>::type
-                            >::type 
-                           >
-    : euml_action<Associative_Erase_<Container,Param1,Param2> >
-{
-    template <class Event,class FSM,class STATE >
-    struct state_action_result 
-    {
-        typedef void type;
-    };
-    template <class EVT,class FSM,class SourceState,class TargetState>
-    struct transition_action_result 
-    {
-        typedef void type;
-    };
-    typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
-
-    template <class EVT,class FSM,class SourceState,class TargetState>
-	typename ::boost::enable_if<
-		typename ::boost::mpl::has_key<
-			typename Container::tag_type,action_tag>::type,
-			typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type 
-     operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
-    {
-        (Container()(evt,fsm,src,tgt)).erase(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
-    }
-	template <class Event,class FSM,class STATE>
-	typename ::boost::enable_if<
-		typename ::boost::mpl::has_key<
-			typename Container::tag_type,state_action_tag>::type,
-			typename state_action_result<Event,FSM,STATE>::type >::type 
-     operator()(Event const& evt,FSM& fsm,STATE& state )const
-    {
-        (Container()(evt,fsm,state)).erase(Param1()(evt,fsm,state),Param2()(evt,fsm,state));        
-    }
-};
-
 struct associative_erase_tag {};
 struct Associative_Erase_Helper: proto::extends< proto::terminal<associative_erase_tag>::type, Associative_Erase_Helper, sm_domain>
 {
@@ -2655,7 +2569,7 @@
 >
     struct In
     {
-        typedef Associative_Erase_<Arg1,Arg2,Arg3,Arg4> type;
+        typedef Associative_Erase_<Arg1,Arg2,Arg3> type;
     };
 };
 Associative_Erase_Helper const associative_erase_;
@@ -3049,20 +2963,8 @@
 };
 Associative_Equal_Range_Helper const associative_equal_range_;
 
-template <class Container, class Param1, class Param2, class Enable=void >
-struct Substr_ : euml_action<Substr_<Container,Param1,Param2,Enable> >
-{
-};
-
 template <class Container,class Param1, class Param2>
-struct Substr_ < 
-        Container,Param1,Param2,
-        typename ::boost::enable_if< 
-                    typename ::boost::is_same<Param1,void>::type
-                    >::type
-                >
-                : euml_action<Substr_<Container,Param1,Param2> >
-
+struct Substr_ : euml_action<Substr_<Container,Param1,Param2> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -3082,29 +2984,21 @@
     typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
        operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
     {
-        return (Container()(evt,fsm,src,tgt)).substr();
+        return (Container()(evt,fsm,src,tgt)).
+            substr(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
     }
     template <class Event,class FSM,class STATE>
     typename state_action_result<Event,FSM,STATE>::type
         operator()(Event const& evt,FSM& fsm,STATE& state )const
     {
-        return (Container()(evt,fsm,state)).substr();
+        return (Container()(evt,fsm,state)).
+            substr(Param1()(evt,fsm,state),Param2()(evt,fsm,state));
     }
 };
+template <class Container>
+struct Substr_ <Container,void,void>
+                : euml_action<Substr_<Container,void,void> >
 
-template <class Container,class Param1, class Param2>
-struct Substr_ < 
-                Container,Param1,Param2,
-                    typename ::boost::enable_if<
-                        typename ::boost::mpl::and_<
-                            typename ::boost::is_same<Param2,void>::type,
-                            typename ::boost::mpl::not_<
-                                typename ::boost::is_same<Param1,void>::type
-                                                >::type
-                                             >::type
-                                       >::type
-                    >
-                : euml_action<Substr_<Container,Param1,Param2> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -3124,24 +3018,19 @@
     typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
        operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
     {
-        return (Container()(evt,fsm,src,tgt)).substr(Param1()(evt,fsm,src,tgt));
+        return (Container()(evt,fsm,src,tgt)).substr();
     }
     template <class Event,class FSM,class STATE>
     typename state_action_result<Event,FSM,STATE>::type
         operator()(Event const& evt,FSM& fsm,STATE& state )const
     {
-        return (Container()(evt,fsm,state)).substr(Param1()(evt,fsm,state));
+        return (Container()(evt,fsm,state)).substr();
     }
 };
 
-template <class Container,class Param1, class Param2>
-struct Substr_< 
-    Container,Param1,Param2,
-            typename ::boost::disable_if< 
-                                typename ::boost::is_same<Param2,void>::type
-                                >::type
-                >
-                : euml_action<Substr_<Container,Param1,Param2> >
+template <class Container,class Param1>
+struct Substr_ < Container,Param1,void>
+                : euml_action<Substr_<Container,Param1,void> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -3161,18 +3050,15 @@
     typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
        operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
     {
-        return (Container()(evt,fsm,src,tgt)).
-            substr(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
+        return (Container()(evt,fsm,src,tgt)).substr(Param1()(evt,fsm,src,tgt));
     }
     template <class Event,class FSM,class STATE>
     typename state_action_result<Event,FSM,STATE>::type
         operator()(Event const& evt,FSM& fsm,STATE& state )const
     {
-        return (Container()(evt,fsm,state)).
-            substr(Param1()(evt,fsm,state),Param2()(evt,fsm,state));
+        return (Container()(evt,fsm,state)).substr(Param1()(evt,fsm,state));
     }
 };
-
 struct substr_tag {};
 struct Substr_Helper: proto::extends< proto::terminal<substr_tag>::type, Substr_Helper, sm_domain>
 {
@@ -3188,8 +3074,8 @@
 };
 Substr_Helper const substr_;
 
-template <class Container, class Param1, class Param2, class Param3, class Param4 ,class Enable=void >
-struct StringCompare_ : euml_action<StringCompare_<Container,Param1,Param2,Param3,Param4,Enable> >
+template <class Container, class Param1, class Param2, class Param3, class Param4 >
+struct StringCompare_ : euml_action<StringCompare_<Container,Param1,Param2,Param3,Param4> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -3210,7 +3096,8 @@
                         typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type 
      operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
     {
-        return (Container()(evt,fsm,src,tgt)).compare(Param1()(evt,fsm,src,tgt));
+        return (Container()(evt,fsm,src,tgt)).compare(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),
+                                                      Param3()(evt,fsm,src,tgt),Param4()(evt,fsm,src,tgt));
     }
         template <class Event,class FSM,class STATE>
         typename ::boost::enable_if<
@@ -3219,17 +3106,13 @@
                         typename state_action_result<Event,FSM,STATE>::type >::type 
      operator()(Event const& evt,FSM& fsm,STATE& state )const
     {
-        return (Container()(evt,fsm,state)).compare(Param1()(evt,fsm,state));        
+        return (Container()(evt,fsm,state)).compare(Param1()(evt,fsm,state),Param2()(evt,fsm,state),
+                                                    Param3()(evt,fsm,state),Param4()(evt,fsm,state));
     }
 };
-
-template <class Container, class Param1, class Param2, class Param3, class Param4 >
-struct StringCompare_<Container,Param1,Param2,Param3,Param4,
-               typename ::boost::disable_if<  
-                    typename ::boost::mpl::or_<typename ::boost::is_same<Param2,void>::type,
-                                               typename ::boost::mpl::not_<
-                                                    typename ::boost::is_same<Param3,void>::type>::type>::type >::type> 
-                    : euml_action<StringCompare_<Container,Param1,Param2,Param3,Param4> >
+template <class Container, class Param1 >
+struct StringCompare_<Container,Param1,void,void,void>  
+    : euml_action<StringCompare_<Container,Param1,void,void,void> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -3250,7 +3133,7 @@
                         typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type 
      operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
     {
-        return (Container()(evt,fsm,src,tgt)).compare(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
+        return (Container()(evt,fsm,src,tgt)).compare(Param1()(evt,fsm,src,tgt));
     }
         template <class Event,class FSM,class STATE>
         typename ::boost::enable_if<
@@ -3259,17 +3142,13 @@
                         typename state_action_result<Event,FSM,STATE>::type >::type 
      operator()(Event const& evt,FSM& fsm,STATE& state )const
     {
-        return (Container()(evt,fsm,state)).compare(Param1()(evt,fsm,state),Param2()(evt,fsm,state));
+        return (Container()(evt,fsm,state)).compare(Param1()(evt,fsm,state));        
     }
 };
 
-template <class Container, class Param1, class Param2, class Param3, class Param4 >
-struct StringCompare_<Container,Param1,Param2,Param3,Param4,
-               typename ::boost::disable_if<  
-                    typename ::boost::mpl::or_<typename ::boost::is_same<Param3,void>::type,
-                                               typename ::boost::mpl::not_<
-                                                    typename ::boost::is_same<Param4,void>::type>::type>::type >::type> 
-                    : euml_action<StringCompare_<Container,Param1,Param2,Param3,Param4> >
+template <class Container, class Param1, class Param2>
+struct StringCompare_<Container,Param1,Param2,void,void> 
+                    : euml_action<StringCompare_<Container,Param1,Param2,void,void> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -3290,8 +3169,7 @@
                         typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type 
      operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
     {
-        return (Container()(evt,fsm,src,tgt)).compare(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),
-                                              Param3()(evt,fsm,src,tgt));
+        return (Container()(evt,fsm,src,tgt)).compare(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
     }
         template <class Event,class FSM,class STATE>
         typename ::boost::enable_if<
@@ -3300,14 +3178,13 @@
                         typename state_action_result<Event,FSM,STATE>::type >::type 
      operator()(Event const& evt,FSM& fsm,STATE& state )const
     {
-        return (Container()(evt,fsm,state)).compare(Param1()(evt,fsm,state),Param2()(evt,fsm,state),
-                                            Param3()(evt,fsm,state));
+        return (Container()(evt,fsm,state)).compare(Param1()(evt,fsm,state),Param2()(evt,fsm,state));
     }
 };
-template <class Container, class Param1, class Param2, class Param3, class Param4 >
-struct StringCompare_<Container,Param1,Param2,Param3,Param4,
-               typename ::boost::disable_if<typename ::boost::is_same<Param4,void>::type >::type> 
-                    : euml_action<StringCompare_<Container,Param1,Param2,Param3,Param4> >
+
+template <class Container, class Param1, class Param2, class Param3 >
+struct StringCompare_<Container,Param1,Param2,Param3,void> 
+                    : euml_action<StringCompare_<Container,Param1,Param2,Param3,void> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -3329,7 +3206,7 @@
      operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
     {
         return (Container()(evt,fsm,src,tgt)).compare(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),
-                                                      Param3()(evt,fsm,src,tgt),Param4()(evt,fsm,src,tgt));
+                                              Param3()(evt,fsm,src,tgt));
     }
         template <class Event,class FSM,class STATE>
         typename ::boost::enable_if<
@@ -3339,9 +3216,10 @@
      operator()(Event const& evt,FSM& fsm,STATE& state )const
     {
         return (Container()(evt,fsm,state)).compare(Param1()(evt,fsm,state),Param2()(evt,fsm,state),
-                                                    Param3()(evt,fsm,state),Param4()(evt,fsm,state));
+                                            Param3()(evt,fsm,state));
     }
 };
+
 struct string_compare_tag {};
 struct StringCompare_Helper: proto::extends< proto::terminal<string_compare_tag>::type, StringCompare_Helper, sm_domain>
 {
@@ -3357,8 +3235,8 @@
 };
 StringCompare_Helper const string_compare_;
 
-template <class Container, class Param1, class Param2, class Param3, class Enable=void >
-struct Append_ : euml_action<Append_<Container,Param1,Param2,Param3,Enable> >
+template <class Container, class Param1, class Param2, class Param3 >
+struct Append_ : euml_action<Append_<Container,Param1,Param2,Param3> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -3379,7 +3257,8 @@
                         typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type 
      operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
     {
-        return (Container()(evt,fsm,src,tgt)).append(Param1()(evt,fsm,src,tgt));
+        return (Container()(evt,fsm,src,tgt)).append (Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),
+                                                      Param3()(evt,fsm,src,tgt));
     }
         template <class Event,class FSM,class STATE>
         typename ::boost::enable_if<
@@ -3388,17 +3267,13 @@
                         typename state_action_result<Event,FSM,STATE>::type >::type 
      operator()(Event const& evt,FSM& fsm,STATE& state )const
     {
-        return (Container()(evt,fsm,state)).append(Param1()(evt,fsm,state));        
+        return (Container()(evt,fsm,state)).append (Param1()(evt,fsm,state),Param2()(evt,fsm,state),
+                                                    Param3()(evt,fsm,state));
     }
 };
-
-template <class Container, class Param1, class Param2, class Param3 >
-struct Append_<Container,Param1,Param2,Param3,
-               typename ::boost::disable_if<  
-                    typename ::boost::mpl::or_<typename ::boost::is_same<Param2,void>::type,
-                                               typename ::boost::mpl::not_<
-                                                    typename ::boost::is_same<Param3,void>::type>::type>::type >::type> 
-                    : euml_action<Append_<Container,Param1,Param2,Param3> >
+template <class Container, class Param1>
+struct Append_<Container,Param1,void,void> 
+                    : euml_action<Append_<Container,Param1,void,void> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -3419,7 +3294,7 @@
                         typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type 
      operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
     {
-        return (Container()(evt,fsm,src,tgt)).append(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
+        return (Container()(evt,fsm,src,tgt)).append(Param1()(evt,fsm,src,tgt));
     }
         template <class Event,class FSM,class STATE>
         typename ::boost::enable_if<
@@ -3428,14 +3303,13 @@
                         typename state_action_result<Event,FSM,STATE>::type >::type 
      operator()(Event const& evt,FSM& fsm,STATE& state )const
     {
-        return (Container()(evt,fsm,state)).append(Param1()(evt,fsm,state),Param2()(evt,fsm,state));
+        return (Container()(evt,fsm,state)).append(Param1()(evt,fsm,state));        
     }
 };
 
-template <class Container, class Param1, class Param2, class Param3 >
-struct Append_<Container,Param1,Param2,Param3,
-               typename ::boost::disable_if<typename ::boost::is_same<Param3,void>::type >::type> 
-                    : euml_action<Append_<Container,Param1,Param2,Param3> >
+template <class Container, class Param1, class Param2 >
+struct Append_<Container,Param1,Param2,void> 
+                    : euml_action<Append_<Container,Param1,Param2,void> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -3456,8 +3330,7 @@
                         typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type 
      operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
     {
-        return (Container()(evt,fsm,src,tgt)).append (Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),
-                                                      Param3()(evt,fsm,src,tgt));
+        return (Container()(evt,fsm,src,tgt)).append(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
     }
         template <class Event,class FSM,class STATE>
         typename ::boost::enable_if<
@@ -3466,10 +3339,10 @@
                         typename state_action_result<Event,FSM,STATE>::type >::type 
      operator()(Event const& evt,FSM& fsm,STATE& state )const
     {
-        return (Container()(evt,fsm,state)).append (Param1()(evt,fsm,state),Param2()(evt,fsm,state),
-                                                    Param3()(evt,fsm,state));
+        return (Container()(evt,fsm,state)).append(Param1()(evt,fsm,state),Param2()(evt,fsm,state));
     }
 };
+
 struct append_tag {};
 struct Append_Helper: proto::extends< proto::terminal<append_tag>::type, Append_Helper, sm_domain>
 {
@@ -3485,19 +3358,8 @@
 };
 Append_Helper const append_;
 
-template <class Container, class Param1, class Param2, class Param3, class Param4 ,class Enable=void >
-struct StringInsert_ : euml_action<StringInsert_<Container,Param1,Param2,Param3,Param4,Enable> >
-{
-};
-
-template <class Container, class Param1, class Param2, class Param3, class Param4>
-struct StringInsert_ < 
-        Container,Param1,Param2,Param3,Param4,
-        typename ::boost::enable_if< 
-                    typename ::boost::is_same<Param3,void>::type
-                    >::type
-                >
-                : euml_action<StringInsert_<Container,Param1,Param2,Param3,Param4> >
+template <class Container, class Param1, class Param2, class Param3, class Param4 >
+struct StringInsert_ : euml_action<StringInsert_<Container,Param1,Param2,Param3,Param4> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -3518,7 +3380,8 @@
                         typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type 
      operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
     {
-        return (Container()(evt,fsm,src,tgt)).insert(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
+        return (Container()(evt,fsm,src,tgt)).insert(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),
+                                                     Param3()(evt,fsm,src,tgt),Param4()(evt,fsm,src,tgt));
     }
         template <class Event,class FSM,class STATE>
         typename ::boost::enable_if<
@@ -3527,16 +3390,13 @@
                         typename state_action_result<Event,FSM,STATE>::type >::type 
      operator()(Event const& evt,FSM& fsm,STATE& state )const
     {
-        return (Container()(evt,fsm,state)).insert(Param1()(evt,fsm,state),Param2()(evt,fsm,state));        
+        return (Container()(evt,fsm,state)).insert(Param1()(evt,fsm,state),Param2()(evt,fsm,state),
+                                                   Param3()(evt,fsm,state),Param4()(evt,fsm,state));
     }
 };
-template <class Container, class Param1, class Param2, class Param3, class Param4 >
-struct StringInsert_<Container,Param1,Param2,Param3,Param4,
-               typename ::boost::disable_if<  
-                    typename ::boost::mpl::or_<typename ::boost::is_same<Param3,void>::type,
-                                               typename ::boost::mpl::not_<
-                                                    typename ::boost::is_same<Param4,void>::type>::type>::type >::type> 
-                    : euml_action<StringInsert_<Container,Param1,Param2,Param3,Param4> >
+template <class Container, class Param1, class Param2>
+struct StringInsert_ <Container,Param1,Param2,void,void>
+                : euml_action<StringInsert_<Container,Param1,Param2,void,void> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -3557,8 +3417,7 @@
                         typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type 
      operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
     {
-        return (Container()(evt,fsm,src,tgt)).insert(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),
-                                                     Param3()(evt,fsm,src,tgt));
+        return (Container()(evt,fsm,src,tgt)).insert(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
     }
         template <class Event,class FSM,class STATE>
         typename ::boost::enable_if<
@@ -3567,14 +3426,12 @@
                         typename state_action_result<Event,FSM,STATE>::type >::type 
      operator()(Event const& evt,FSM& fsm,STATE& state )const
     {
-        return (Container()(evt,fsm,state)).insert(Param1()(evt,fsm,state),Param2()(evt,fsm,state),
-                                                   Param3()(evt,fsm,state));
+        return (Container()(evt,fsm,state)).insert(Param1()(evt,fsm,state),Param2()(evt,fsm,state));        
     }
 };
-template <class Container, class Param1, class Param2, class Param3, class Param4 >
-struct StringInsert_<Container,Param1,Param2,Param3,Param4,
-               typename ::boost::disable_if<typename ::boost::is_same<Param4,void>::type >::type> 
-                    : euml_action<StringInsert_<Container,Param1,Param2,Param3,Param4> >
+template <class Container, class Param1, class Param2, class Param3>
+struct StringInsert_<Container,Param1,Param2,Param3,void> 
+                    : euml_action<StringInsert_<Container,Param1,Param2,Param3,void> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -3596,7 +3453,7 @@
      operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
     {
         return (Container()(evt,fsm,src,tgt)).insert(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),
-                                                     Param3()(evt,fsm,src,tgt),Param4()(evt,fsm,src,tgt));
+                                                     Param3()(evt,fsm,src,tgt));
     }
         template <class Event,class FSM,class STATE>
         typename ::boost::enable_if<
@@ -3606,9 +3463,10 @@
      operator()(Event const& evt,FSM& fsm,STATE& state )const
     {
         return (Container()(evt,fsm,state)).insert(Param1()(evt,fsm,state),Param2()(evt,fsm,state),
-                                                   Param3()(evt,fsm,state),Param4()(evt,fsm,state));
+                                                   Param3()(evt,fsm,state));
     }
 };
+
 struct string_insert_tag {};
 struct StringInsert_Helper: proto::extends< proto::terminal<string_insert_tag>::type, StringInsert_Helper, sm_domain>
 {
@@ -3624,21 +3482,8 @@
 };
 StringInsert_Helper const string_insert_;
 
-
-template <class Container, class Param1, class Param2, class Enable=void >
-struct StringErase_ : euml_action<StringErase_<Container,Param1,Param2,Enable> >
-{
-};
-
 template <class Container,class Param1, class Param2>
-struct StringErase_ < 
-        Container,Param1,Param2,
-        typename ::boost::enable_if< 
-                    typename ::boost::is_same<Param1,void>::type
-                    >::type
-                >
-                : euml_action<StringErase_<Container,Param1,Param2> >
-
+struct StringErase_ : euml_action<StringErase_<Container,Param1,Param2> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -3656,29 +3501,21 @@
     typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
        operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
     {
-        return (Container()(evt,fsm,src,tgt)).erase();
+        return (Container()(evt,fsm,src,tgt)).
+            erase(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
     }
     template <class Event,class FSM,class STATE>
     typename state_action_result<Event,FSM,STATE>::type
         operator()(Event const& evt,FSM& fsm,STATE& state )const
     {
-        return (Container()(evt,fsm,state)).erase();
+        return (Container()(evt,fsm,state)).
+            erase(Param1()(evt,fsm,state),Param2()(evt,fsm,state));
     }
 };
+template <class Container>
+struct StringErase_ <Container,void,void>
+                : euml_action<StringErase_<Container,void,void> >
 
-template <class Container,class Param1, class Param2>
-struct StringErase_ < 
-                Container,Param1,Param2,
-                    typename ::boost::enable_if<
-                        typename ::boost::mpl::and_<
-                            typename ::boost::is_same<Param2,void>::type,
-                            typename ::boost::mpl::not_<
-                                typename ::boost::is_same<Param1,void>::type
-                                                >::type
-                                             >::type
-                                       >::type
-                    >
-                : euml_action<StringErase_<Container,Param1,Param2> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -3696,24 +3533,19 @@
     typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
        operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
     {
-        return (Container()(evt,fsm,src,tgt)).erase(Param1()(evt,fsm,src,tgt));
+        return (Container()(evt,fsm,src,tgt)).erase();
     }
     template <class Event,class FSM,class STATE>
     typename state_action_result<Event,FSM,STATE>::type
         operator()(Event const& evt,FSM& fsm,STATE& state )const
     {
-        return (Container()(evt,fsm,state)).erase(Param1()(evt,fsm,state));
+        return (Container()(evt,fsm,state)).erase();
     }
 };
 
-template <class Container,class Param1, class Param2>
-struct StringErase_< 
-    Container,Param1,Param2,
-            typename ::boost::disable_if< 
-                                typename ::boost::is_same<Param2,void>::type
-                                >::type
-                >
-                : euml_action<StringErase_<Container,Param1,Param2> >
+template <class Container,class Param1>
+struct StringErase_ <Container,Param1,void>
+                : euml_action<StringErase_<Container,Param1,void> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -3731,15 +3563,13 @@
     typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
        operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
     {
-        return (Container()(evt,fsm,src,tgt)).
-            erase(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
+        return (Container()(evt,fsm,src,tgt)).erase(Param1()(evt,fsm,src,tgt));
     }
     template <class Event,class FSM,class STATE>
     typename state_action_result<Event,FSM,STATE>::type
         operator()(Event const& evt,FSM& fsm,STATE& state )const
     {
-        return (Container()(evt,fsm,state)).
-            erase(Param1()(evt,fsm,state),Param2()(evt,fsm,state));
+        return (Container()(evt,fsm,state)).erase(Param1()(evt,fsm,state));
     }
 };
 
@@ -3758,19 +3588,8 @@
 };
 StringErase_Helper const string_erase_;
 
-template <class Container, class Param1, class Param2, class Param3, class Enable=void >
-struct StringAssign_ : euml_action<StringAssign_<Container,Param1,Param2,Param3,Enable> >
-{
-};
-
-template <class Container,class Param1, class Param2, class Param3>
-struct StringAssign_ < 
-        Container,Param1,Param2,Param3,
-        typename ::boost::enable_if< 
-                    typename ::boost::is_same<Param2,void>::type
-                    >::type
-                >
-                : euml_action<StringAssign_<Container,Param1,Param2,Param3> >
+template <class Container, class Param1, class Param2, class Param3 >
+struct StringAssign_ : euml_action<StringAssign_<Container,Param1,Param2,Param3> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -3791,7 +3610,8 @@
                         typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type 
      operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
     {
-        return (Container()(evt,fsm,src,tgt)).assign(Param1()(evt,fsm,src,tgt));
+        return (Container()(evt,fsm,src,tgt)).assign (Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),
+                                                      Param3()(evt,fsm,src,tgt));
     }
         template <class Event,class FSM,class STATE>
         typename ::boost::enable_if<
@@ -3800,17 +3620,14 @@
                         typename state_action_result<Event,FSM,STATE>::type >::type 
      operator()(Event const& evt,FSM& fsm,STATE& state )const
     {
-        return (Container()(evt,fsm,state)).assign(Param1()(evt,fsm,state));        
+        return (Container()(evt,fsm,state)).assign (Param1()(evt,fsm,state),Param2()(evt,fsm,state),
+                                                    Param3()(evt,fsm,state));
     }
 };
-
-template <class Container, class Param1, class Param2, class Param3 >
-struct StringAssign_<Container,Param1,Param2,Param3,
-               typename ::boost::disable_if<  
-                    typename ::boost::mpl::or_<typename ::boost::is_same<Param2,void>::type,
-                                               typename ::boost::mpl::not_<
-                                                    typename ::boost::is_same<Param3,void>::type>::type>::type >::type> 
-                    : euml_action<StringAssign_<Container,Param1,Param2,Param3> >
+template <class Container,class Param1>
+struct StringAssign_ < 
+        Container,Param1,void,void>
+                : euml_action<StringAssign_<Container,Param1,void,void> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -3831,7 +3648,7 @@
                         typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type 
      operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
     {
-        return (Container()(evt,fsm,src,tgt)).assign(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
+        return (Container()(evt,fsm,src,tgt)).assign(Param1()(evt,fsm,src,tgt));
     }
         template <class Event,class FSM,class STATE>
         typename ::boost::enable_if<
@@ -3840,14 +3657,13 @@
                         typename state_action_result<Event,FSM,STATE>::type >::type 
      operator()(Event const& evt,FSM& fsm,STATE& state )const
     {
-        return (Container()(evt,fsm,state)).assign(Param1()(evt,fsm,state),Param2()(evt,fsm,state));
+        return (Container()(evt,fsm,state)).assign(Param1()(evt,fsm,state));        
     }
 };
 
-template <class Container, class Param1, class Param2, class Param3 >
-struct StringAssign_<Container,Param1,Param2,Param3,
-               typename ::boost::disable_if<typename ::boost::is_same<Param3,void>::type >::type> 
-                    : euml_action<StringAssign_<Container,Param1,Param2,Param3> >
+template <class Container, class Param1, class Param2 >
+struct StringAssign_<Container,Param1,Param2,void> 
+                    : euml_action<StringAssign_<Container,Param1,Param2,void> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -3868,8 +3684,7 @@
                         typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type 
      operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
     {
-        return (Container()(evt,fsm,src,tgt)).assign (Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),
-                                                      Param3()(evt,fsm,src,tgt));
+        return (Container()(evt,fsm,src,tgt)).assign(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
     }
         template <class Event,class FSM,class STATE>
         typename ::boost::enable_if<
@@ -3878,8 +3693,7 @@
                         typename state_action_result<Event,FSM,STATE>::type >::type 
      operator()(Event const& evt,FSM& fsm,STATE& state )const
     {
-        return (Container()(evt,fsm,state)).assign (Param1()(evt,fsm,state),Param2()(evt,fsm,state),
-                                                    Param3()(evt,fsm,state));
+        return (Container()(evt,fsm,state)).assign(Param1()(evt,fsm,state),Param2()(evt,fsm,state));
     }
 };
 struct assign_tag {};
@@ -3897,15 +3711,8 @@
 };
 StringAssign_Helper const string_assign_;
 
-template <class Container, class Param1, class Param2, class Param3, class Param4, class Enable=void >
-struct StringReplace_ : euml_action<StringReplace_<Container,Param1,Param2,Param3,Param4,Enable> >
-{
-};
-
 template <class Container,class Param1, class Param2, class Param3, class Param4>
-struct StringReplace_<Container,Param1,Param2,Param3,Param4,
-               typename ::boost::enable_if<typename ::boost::is_same<Param4,void>::type >::type> 
-                    : euml_action<StringReplace_<Container,Param1,Param2,Param3,Param4> >
+struct StringReplace_ : euml_action<StringReplace_<Container,Param1,Param2,Param3,Param4> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -3926,8 +3733,8 @@
                         typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type 
      operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
     {
-        return (Container()(evt,fsm,src,tgt)).replace(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),
-                                                      Param3()(evt,fsm,src,tgt));
+        return (Container()(evt,fsm,src,tgt)).replace (Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),
+                                                       Param3()(evt,fsm,src,tgt),Param4()(evt,fsm,src,tgt));
     }
         template <class Event,class FSM,class STATE>
         typename ::boost::enable_if<
@@ -3936,15 +3743,14 @@
                         typename state_action_result<Event,FSM,STATE>::type >::type 
      operator()(Event const& evt,FSM& fsm,STATE& state )const
     {
-        return (Container()(evt,fsm,state)).replace(Param1()(evt,fsm,state),Param2()(evt,fsm,state),
-                                                    Param3()(evt,fsm,state));        
+        return (Container()(evt,fsm,state)).replace (Param1()(evt,fsm,state),Param2()(evt,fsm,state),
+                                                     Param3()(evt,fsm,state),Param4()(evt,fsm,state));
     }
 };
 
-template <class Container,class Param1, class Param2, class Param3, class Param4>
-struct StringReplace_<Container,Param1,Param2,Param3,Param4,
-               typename ::boost::disable_if<typename ::boost::is_same<Param4,void>::type >::type> 
-                    : euml_action<StringReplace_<Container,Param1,Param2,Param3,Param4> >
+template <class Container,class Param1, class Param2, class Param3>
+struct StringReplace_<Container,Param1,Param2,Param3,void> 
+                    : euml_action<StringReplace_<Container,Param1,Param2,Param3,void> >
 {
     template <class Event,class FSM,class STATE >
     struct state_action_result 
@@ -3965,8 +3771,8 @@
                         typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type 
      operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
     {
-        return (Container()(evt,fsm,src,tgt)).replace (Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),
-                                                       Param3()(evt,fsm,src,tgt),Param4()(evt,fsm,src,tgt));
+        return (Container()(evt,fsm,src,tgt)).replace(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),
+                                                      Param3()(evt,fsm,src,tgt));
     }
         template <class Event,class FSM,class STATE>
         typename ::boost::enable_if<
@@ -3975,10 +3781,11 @@
                         typename state_action_result<Event,FSM,STATE>::type >::type 
      operator()(Event const& evt,FSM& fsm,STATE& state )const
     {
-        return (Container()(evt,fsm,state)).replace (Param1()(evt,fsm,state),Param2()(evt,fsm,state),
-                                                     Param3()(evt,fsm,state),Param4()(evt,fsm,state));
+        return (Container()(evt,fsm,state)).replace(Param1()(evt,fsm,state),Param2()(evt,fsm,state),
+                                                    Param3()(evt,fsm,state));        
     }
 };
+
 struct string_replace_tag {};
 struct StringReplace_Helper: proto::extends< proto::terminal<string_replace_tag>::type, StringReplace_Helper, sm_domain>
 {