Boost logo

Boost-Commit :

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


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk