Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r61005 - sandbox/msm/boost/msm/front/euml
From: christophe.j.henry_at_[hidden]
Date: 2010-04-02 14:00:41


Author: chenry
Date: 2010-04-02 14:00:40 EDT (Fri, 02 Apr 2010)
New Revision: 61005
URL: http://svn.boost.org/trac/boost/changeset/61005

Log:
fixed problem of name conflict with identical state definition
Text files modified:
   sandbox/msm/boost/msm/front/euml/state_grammar.hpp | 249 ++++++++++++++++++++++++---------------
   1 files changed, 152 insertions(+), 97 deletions(-)

Modified: sandbox/msm/boost/msm/front/euml/state_grammar.hpp
==============================================================================
--- sandbox/msm/boost/msm/front/euml/state_grammar.hpp (original)
+++ sandbox/msm/boost/msm/front/euml/state_grammar.hpp 2010-04-02 14:00:40 EDT (Fri, 02 Apr 2010)
@@ -36,19 +36,21 @@
 {
 
 // provides the typedefs and interface. Concrete states derive from it.
-template<class EntryFunctor=NoAction,
+template<class StateNameTag,
+ class EntryFunctor=NoAction,
          class ExitFunctor=NoAction,
                  class Attributes= ::boost::fusion::vector<>,
          class Flags = ::boost::mpl::vector0<>,
          class Defer = ::boost::mpl::vector0<>,
          class BASE = ::boost::msm::front::default_base_state>
 struct func_state : public ::boost::msm::front::detail::state_base<BASE,Attributes>,
- euml_state<func_state<EntryFunctor,ExitFunctor,Attributes,Flags,Defer,BASE> >
+ euml_state<func_state<StateNameTag,EntryFunctor,ExitFunctor,Attributes,Flags,Defer,BASE> >
 {
     // grammar testing
     BOOST_MPL_ASSERT_NOT(( boost::is_same<EntryFunctor,invalid_type> ));
     BOOST_MPL_ASSERT_NOT(( boost::is_same<ExitFunctor,invalid_type> ));
 
+ typedef StateNameTag state_name_tag;
     // flags
     typedef Flags flag_list;
     // deferred events
@@ -67,7 +69,8 @@
 };
 
 // provides the typedefs and interface. Concrete states derive from it.
-template<int ZoneIndex=-1,
+template<class StateNameTag,
+ int ZoneIndex=-1,
          class EntryFunctor=NoAction,
          class ExitFunctor=NoAction,
                  class Attributes= ::boost::fusion::vector<>,
@@ -75,12 +78,13 @@
          class Defer = ::boost::mpl::vector0<>,
          class BASE = default_base_state>
 struct entry_func_state : public ::boost::msm::front::detail::state_base<BASE,Attributes>,
- euml_state<entry_func_state<ZoneIndex,EntryFunctor,ExitFunctor,Attributes,Flags,Defer,BASE> >
+ euml_state<entry_func_state<StateNameTag,ZoneIndex,EntryFunctor,ExitFunctor,Attributes,Flags,Defer,BASE> >
 {
     // grammar testing
     BOOST_MPL_ASSERT_NOT(( boost::is_same<EntryFunctor,invalid_type> ));
     BOOST_MPL_ASSERT_NOT(( boost::is_same<ExitFunctor,invalid_type> ));
 
+ typedef StateNameTag state_name_tag;
     // tags
     typedef int pseudo_entry;
     enum {zone_index=ZoneIndex};
@@ -103,7 +107,8 @@
         }
 };
 // provides the typedefs and interface. Concrete states derive from it.
-template<int ZoneIndex=-1,
+template<class StateNameTag,
+ int ZoneIndex=-1,
          class EntryFunctor=NoAction,
          class ExitFunctor=NoAction,
                  class Attributes= ::boost::fusion::vector<>,
@@ -112,13 +117,14 @@
          class BASE = default_base_state>
 struct explicit_entry_func_state : public ::boost::msm::front::detail::state_base<BASE,Attributes>,
                                     public ::boost::msm::front::explicit_entry<ZoneIndex>,
- euml_state<explicit_entry_func_state<
+ euml_state<explicit_entry_func_state<StateNameTag,
                                         ZoneIndex,EntryFunctor,ExitFunctor,Attributes,Flags,Defer,BASE> >
 {
     // grammar testing
     BOOST_MPL_ASSERT_NOT(( boost::is_same<EntryFunctor,invalid_type> ));
     BOOST_MPL_ASSERT_NOT(( boost::is_same<ExitFunctor,invalid_type> ));
 
+ typedef StateNameTag state_name_tag;
     // flags
     typedef Flags flag_list;
     // deferred events
@@ -137,7 +143,8 @@
 };
 
 // provides the typedefs and interface. Concrete states derive from it.
-template<class Event,
+template<class StateNameTag,
+ class Event,
          class EntryFunctor=NoAction,
          class ExitFunctor=NoAction,
                  class Attributes= ::boost::fusion::vector<>,
@@ -145,12 +152,13 @@
          class Defer = ::boost::mpl::vector0<>,
          class BASE = default_base_state>
 struct exit_func_state : public ::boost::msm::front::detail::state_base<BASE,Attributes>,
- euml_state<exit_func_state<Event,EntryFunctor,ExitFunctor,Attributes,Flags,Defer,BASE> >
+ euml_state<exit_func_state<StateNameTag,Event,EntryFunctor,ExitFunctor,Attributes,Flags,Defer,BASE> >
 {
     // grammar testing
     BOOST_MPL_ASSERT_NOT(( boost::is_same<EntryFunctor,invalid_type> ));
     BOOST_MPL_ASSERT_NOT(( boost::is_same<ExitFunctor,invalid_type> ));
 
+ typedef StateNameTag state_name_tag;
     // tags
     typedef Event event;
     typedef BASE Base;
@@ -496,7 +504,6 @@
 {};
 
 // attributes building
-//TODO not euml_action?
 #define BOOST_MSM_EUML_DECLARE_ATTRIBUTE(attr_type,attr_name) \
 struct attr_name ## _ \
     : proto::extends< proto::terminal<msm::front::action_tag>::type, attr_name ## _, sm_domain> \
@@ -651,9 +658,10 @@
>
  {};
 
-template <class Expr1,class Expr2,class Attr,class Configure,class BASE>
+template <class StateNameTag,class Expr1,class Expr2,class Attr,class Configure,class BASE>
 inline
 func_state<
+StateNameTag,
 typename ::boost::mpl::eval_if<
     typename proto::matches<Expr1,BuildActionSequence>::type,
     boost::result_of<BuildActionSequence(Expr1)>,
@@ -674,12 +682,13 @@
     typedef typename boost::result_of<BuildAttributes(Attr)>::type attributes_type;
     typedef typename boost::result_of<BuildFlags(Configure)>::type flags_type;
     typedef typename boost::result_of<BuildDeferred(Configure)>::type deferred_type;
- return func_state<entry_action,exit_action,attributes_type,flags_type,deferred_type,BASE>();
+ return func_state<StateNameTag,entry_action,exit_action,attributes_type,flags_type,deferred_type,BASE>();
 }
 
-template <class Expr1,class Expr2,class Attr,class Configure>
+template <class StateNameTag,class Expr1,class Expr2,class Attr,class Configure>
 inline
 func_state<
+StateNameTag,
 typename ::boost::mpl::eval_if<
     typename proto::matches<Expr1,BuildActionSequence>::type,
     boost::result_of<BuildActionSequence(Expr1)>,
@@ -699,12 +708,13 @@
     typedef typename boost::result_of<BuildAttributes(Attr)>::type attributes_type;
     typedef typename boost::result_of<BuildFlags(Configure)>::type flags_type;
     typedef typename boost::result_of<BuildDeferred(Configure)>::type deferred_type;
- return func_state<entry_action,exit_action,attributes_type,flags_type,deferred_type>();
+ return func_state<StateNameTag,entry_action,exit_action,attributes_type,flags_type,deferred_type>();
 }
 
-template <class Expr1,class Expr2,class Attr>
+template <class StateNameTag,class Expr1,class Expr2,class Attr>
 inline
 func_state<
+StateNameTag,
 typename ::boost::mpl::eval_if<
     typename proto::matches<Expr1,BuildActionSequence>::type,
     boost::result_of<BuildActionSequence(Expr1)>,
@@ -720,12 +730,13 @@
         typedef typename boost::result_of<BuildActionSequence(Expr1)>::type entry_action;
         typedef typename boost::result_of<BuildActionSequence(Expr2)>::type exit_action;
     typedef typename boost::result_of<BuildAttributes(Attr)>::type attributes_type;
- return func_state<entry_action,exit_action,attributes_type>();
+ return func_state<StateNameTag,entry_action,exit_action,attributes_type>();
 }
 
-template <class Expr1,class Expr2>
+template <class StateNameTag,class Expr1,class Expr2>
 inline
 func_state<
+StateNameTag,
 typename ::boost::mpl::eval_if<
     typename proto::matches<Expr1,BuildActionSequence>::type,
     boost::result_of<BuildActionSequence(Expr1)>,
@@ -739,12 +750,13 @@
 {
         typedef typename boost::result_of<BuildActionSequence(Expr1)>::type entry_action;
         typedef typename boost::result_of<BuildActionSequence(Expr2)>::type exit_action;
- return func_state<entry_action,exit_action>();
+ return func_state<StateNameTag,entry_action,exit_action>();
 }
 
-template <class Expr1>
+template <class StateNameTag,class Expr1>
 inline
 func_state<
+StateNameTag,
 typename ::boost::mpl::eval_if<
     typename proto::matches<Expr1,BuildActionSequence>::type,
     boost::result_of<BuildActionSequence(Expr1)>,
@@ -754,20 +766,23 @@
 build_state(Expr1 const& )
 {
         typedef typename boost::result_of<BuildActionSequence(Expr1)>::type entry_action;
- return func_state<entry_action,NoAction>();
+ return func_state<StateNameTag,entry_action,NoAction>();
 }
+template<class StateNameTag>
 inline
 func_state<
+StateNameTag,
 NoAction,
 NoAction
>
 build_state()
 {
- return func_state<NoAction,NoAction>();
+ return func_state<StateNameTag,NoAction,NoAction>();
 }
 
 // provides the typedefs and interface. Concrete states derive from it.
-template<class STT,
+template<class StateNameTag,
+ class STT,
          class Init,
          class EntryFunctor=NoAction,
          class ExitFunctor=NoAction,
@@ -779,7 +794,7 @@
          class OnExceptionFunctor = NoAction,
          class BASE = ::boost::msm::front::default_base_state>
 struct func_state_machine : public ::boost::msm::front::detail::state_base<BASE,Attributes>,
- euml_state<func_state_machine<STT,Init,EntryFunctor,ExitFunctor,Attributes,Flags,
+ euml_state<func_state_machine<StateNameTag,STT,Init,EntryFunctor,ExitFunctor,Attributes,Flags,
                                                         Defer,NoTransitionFunctor,OnExceptionFunctor,BASE> >
 {
     // grammar testing
@@ -790,6 +805,7 @@
     BOOST_MPL_ASSERT_NOT(( boost::is_same<STT,invalid_type> ));
 
     // flags
+ typedef StateNameTag state_name_tag;
     typedef Flags flag_list;
     // deferred events
     typedef Defer deferred_events;
@@ -827,21 +843,23 @@
     }
 };
 
-template <class STT,class Init>
+template <class StateNameTag,class STT,class Init>
 inline
 func_state_machine<
+StateNameTag,
 STT,
 typename boost::result_of<BuildInit(Init)>::type
>
 build_sm(STT ,Init)
 {
     typedef typename boost::result_of<BuildInit(Init)>::type init_type;
- return func_state_machine<STT,init_type>();
+ return func_state_machine<StateNameTag,STT,init_type>();
 }
 
-template <class STT,class Init,class Expr1>
+template <class StateNameTag,class STT,class Init,class Expr1>
 inline
 func_state_machine<
+StateNameTag,
 STT,
 typename boost::result_of<BuildInit(Init)>::type,
 typename ::boost::mpl::eval_if<
@@ -853,12 +871,13 @@
 {
     typedef typename boost::result_of<BuildActionSequence(Expr1)>::type entry_action;
     typedef typename boost::result_of<BuildInit(Init)>::type init_type;
- return func_state_machine<STT,init_type,entry_action>();
+ return func_state_machine<StateNameTag,STT,init_type,entry_action>();
 }
 
-template <class STT,class Init,class Expr1,class Expr2>
+template <class StateNameTag,class STT,class Init,class Expr1,class Expr2>
 inline
 func_state_machine<
+StateNameTag,
 STT,
 typename boost::result_of<BuildInit(Init)>::type,
 typename ::boost::mpl::eval_if<
@@ -875,12 +894,13 @@
     typedef typename boost::result_of<BuildInit(Init)>::type init_type;
     typedef typename boost::result_of<BuildActionSequence(Expr1)>::type entry_action;
     typedef typename boost::result_of<BuildActionSequence(Expr2)>::type exit_action;
- return func_state_machine<STT,init_type,entry_action,exit_action>();
+ return func_state_machine<StateNameTag,STT,init_type,entry_action,exit_action>();
 }
 
-template <class STT,class Init,class Expr1,class Expr2,class Attr>
+template <class StateNameTag,class STT,class Init,class Expr1,class Expr2,class Attr>
 inline
 func_state_machine<
+StateNameTag,
 STT,
 typename boost::result_of<BuildInit(Init)>::type,
 typename ::boost::mpl::eval_if<
@@ -899,12 +919,13 @@
     typedef typename boost::result_of<BuildActionSequence(Expr1)>::type entry_action;
     typedef typename boost::result_of<BuildActionSequence(Expr2)>::type exit_action;
     typedef typename boost::result_of<BuildAttributes(Attr)>::type attributes_type;
- return func_state_machine<STT,init_type,entry_action,exit_action,attributes_type>();
+ return func_state_machine<StateNameTag,STT,init_type,entry_action,exit_action,attributes_type>();
 }
 
-template <class STT,class Init,class Expr1,class Expr2,class Attr,class Configure>
+template <class StateNameTag,class STT,class Init,class Expr1,class Expr2,class Attr,class Configure>
 inline
 func_state_machine<
+StateNameTag,
 STT,
 typename boost::result_of<BuildInit(Init)>::type,
 typename ::boost::mpl::eval_if<
@@ -929,14 +950,15 @@
     typedef typename boost::result_of<BuildFlags(Configure)>::type flags_type;
     typedef typename boost::result_of<BuildDeferred(Configure)>::type deferred_type;
     typedef typename boost::result_of<BuildConfigure(Configure)>::type config_type;
- return func_state_machine<STT,init_type,entry_action,exit_action,attributes_type,flags_type,
+ return func_state_machine<StateNameTag,STT,init_type,entry_action,exit_action,attributes_type,flags_type,
                               deferred_type,config_type>();
 
 }
 
-template <class STT,class Init,class Expr1,class Expr2,class Attr,class Configure,class Expr3>
+template <class StateNameTag,class STT,class Init,class Expr1,class Expr2,class Attr,class Configure,class Expr3>
 inline
 func_state_machine<
+StateNameTag,
 STT,
 typename boost::result_of<BuildInit(Init)>::type,
 typename ::boost::mpl::eval_if<
@@ -966,13 +988,14 @@
     typedef typename boost::result_of<BuildFlags(Configure)>::type flags_type;
     typedef typename boost::result_of<BuildDeferred(Configure)>::type deferred_type;
     typedef typename boost::result_of<BuildConfigure(Configure)>::type config_type;
- return func_state_machine<STT,init_type,entry_action,exit_action,attributes_type,flags_type,deferred_type,
+ return func_state_machine<StateNameTag,STT,init_type,entry_action,exit_action,attributes_type,flags_type,deferred_type,
                               config_type,no_transition_action>();
 }
 
-template <class STT,class Init,class Expr1,class Expr2,class Attr,class Configure,class Expr3,class Expr4>
+template <class StateNameTag,class STT,class Init,class Expr1,class Expr2,class Attr,class Configure,class Expr3,class Expr4>
 inline
 func_state_machine<
+StateNameTag,
 STT,
 typename boost::result_of<BuildInit(Init)>::type,
 typename ::boost::mpl::eval_if<
@@ -1007,13 +1030,14 @@
     typedef typename boost::result_of<BuildActionSequence(Expr3)>::type no_transition_action;
     typedef typename boost::result_of<BuildActionSequence(Expr4)>::type on_exception_action;
     typedef typename boost::result_of<BuildAttributes(Attr)>::type attributes_type;
- return func_state_machine<STT,init_type,entry_action,exit_action,attributes_type,flags_type,deferred_type,
+ return func_state_machine<StateNameTag,STT,init_type,entry_action,exit_action,attributes_type,flags_type,deferred_type,
                               config_type,no_transition_action,on_exception_action>();
 }
 
-template <class STT,class Init,class Expr1,class Expr2,class Attr,class Configure,class Expr3,class Expr4,class BASE>
+template <class StateNameTag,class STT,class Init,class Expr1,class Expr2,class Attr,class Configure,class Expr3,class Expr4,class BASE>
 inline
 func_state_machine<
+StateNameTag,
 STT,
 typename boost::result_of<BuildInit(Init)>::type,
 typename ::boost::mpl::eval_if<
@@ -1049,7 +1073,7 @@
     typedef typename boost::result_of<BuildActionSequence(Expr3)>::type no_transition_action;
     typedef typename boost::result_of<BuildActionSequence(Expr4)>::type on_exception_action;
     typedef typename boost::result_of<BuildAttributes(Attr)>::type attributes_type;
- return func_state_machine<STT,init_type,entry_action,exit_action,attributes_type,flags_type,deferred_type,
+ return func_state_machine<StateNameTag,STT,init_type,entry_action,exit_action,attributes_type,flags_type,deferred_type,
                               config_type,no_transition_action,on_exception_action,BASE>();
 }
 
@@ -1061,9 +1085,10 @@
     return ::boost::msm::front::detail::inherit_attributes<typename boost::result_of<BuildAttributes(Expr)>::type> ();
 }
 
-template <class Expr1,class Expr2,class Attr,class Configure,class BASE>
+template <class StateNameTag,class Expr1,class Expr2,class Attr,class Configure,class BASE>
 inline
 func_state<
+StateNameTag,
 typename ::boost::mpl::eval_if<
     typename proto::matches<Expr1,BuildActionSequence>::type,
     boost::result_of<BuildActionSequence(Expr1)>,
@@ -1087,12 +1112,13 @@
         ::boost::msm::TerminateFlag >::type flags_type;
     typedef typename boost::result_of<BuildDeferred(Configure)>::type deferred_type;
     typedef typename boost::result_of<BuildAttributes(Attr)>::type attributes_type;
- return func_state<entry_action,exit_action,attributes_type,flags_type,deferred_type,BASE>();
+ return func_state<StateNameTag,entry_action,exit_action,attributes_type,flags_type,deferred_type,BASE>();
 }
 
-template <class Expr1,class Expr2,class Attr,class Configure>
+template <class StateNameTag,class Expr1,class Expr2,class Attr,class Configure>
 inline
 func_state<
+StateNameTag,
 typename ::boost::mpl::eval_if<
     typename proto::matches<Expr1,BuildActionSequence>::type,
     boost::result_of<BuildActionSequence(Expr1)>,
@@ -1116,12 +1142,13 @@
     typedef typename boost::result_of<BuildDeferred(Configure)>::type deferred_type;
     typedef typename boost::result_of<BuildAttributes(Attr)>::type attributes_type;
 
- return func_state<entry_action,exit_action,attributes_type,flags_type,deferred_type>();
+ return func_state<StateNameTag,entry_action,exit_action,attributes_type,flags_type,deferred_type>();
 }
 
-template <class Expr1,class Expr2,class Attr>
+template <class StateNameTag,class Expr1,class Expr2,class Attr>
 inline
 func_state<
+StateNameTag,
 typename ::boost::mpl::eval_if<
     typename proto::matches<Expr1,BuildActionSequence>::type,
     boost::result_of<BuildActionSequence(Expr1)>,
@@ -1138,12 +1165,13 @@
         typedef typename boost::result_of<BuildActionSequence(Expr1)>::type entry_action;
         typedef typename boost::result_of<BuildActionSequence(Expr2)>::type exit_action;
     typedef typename boost::result_of<BuildAttributes(Attr)>::type attributes_type;
- return func_state<entry_action,exit_action,attributes_type, ::boost::mpl::vector< ::boost::msm::TerminateFlag> >();
+ return func_state<StateNameTag,entry_action,exit_action,attributes_type, ::boost::mpl::vector< ::boost::msm::TerminateFlag> >();
 }
 
-template <class Expr1,class Expr2>
+template <class StateNameTag,class Expr1,class Expr2>
 inline
 func_state<
+StateNameTag,
 typename ::boost::mpl::eval_if<
     typename proto::matches<Expr1,BuildActionSequence>::type,
     boost::result_of<BuildActionSequence(Expr1)>,
@@ -1159,13 +1187,14 @@
 {
         typedef typename boost::result_of<BuildActionSequence(Expr1)>::type entry_action;
         typedef typename boost::result_of<BuildActionSequence(Expr2)>::type exit_action;
- return func_state<entry_action,exit_action,
+ return func_state<StateNameTag,entry_action,exit_action,
                       ::boost::fusion::vector<>, ::boost::mpl::vector< ::boost::msm::TerminateFlag> >();
 }
 
-template <class Expr1>
+template <class StateNameTag,class Expr1>
 inline
 func_state<
+StateNameTag,
 typename ::boost::mpl::eval_if<
     typename proto::matches<Expr1,BuildActionSequence>::type,
     boost::result_of<BuildActionSequence(Expr1)>,
@@ -1177,10 +1206,12 @@
 build_terminate_state(Expr1 const& )
 {
         typedef typename boost::result_of<BuildActionSequence(Expr1)>::type entry_action;
- return func_state<entry_action,NoAction,::boost::fusion::vector<>,::boost::mpl::vector<boost::msm::TerminateFlag> >();
+ return func_state<StateNameTag,entry_action,NoAction,::boost::fusion::vector<>,::boost::mpl::vector<boost::msm::TerminateFlag> >();
 }
+template<class StateNameTag>
 inline
 func_state<
+StateNameTag,
 NoAction,
 NoAction,
 ::boost::fusion::vector<>,
@@ -1188,12 +1219,13 @@
>
 build_terminate_state()
 {
- return func_state<NoAction,NoAction,::boost::fusion::vector<>,::boost::mpl::vector<boost::msm::TerminateFlag> >();
+ return func_state<StateNameTag,NoAction,NoAction,::boost::fusion::vector<>,::boost::mpl::vector<boost::msm::TerminateFlag> >();
 }
 
-template <class Expr1,class Expr2,class Attr,class Configure,class BASE,class EndInterruptEvent>
+template <class StateNameTag,class Expr1,class Expr2,class Attr,class Configure,class BASE,class EndInterruptEvent>
 inline
 func_state<
+StateNameTag,
 typename ::boost::mpl::eval_if<
     typename proto::matches<Expr1,BuildActionSequence>::type,
     boost::result_of<BuildActionSequence(Expr1)>,
@@ -1223,12 +1255,13 @@
                 boost::msm::EndInterruptFlag<EndInterruptEvent>
>::type flags_type;
     typedef typename boost::result_of<BuildDeferred(Configure)>::type deferred_type;
- return func_state<entry_action,exit_action,attributes_type,flags_type,deferred_type,BASE>();
+ return func_state<StateNameTag,entry_action,exit_action,attributes_type,flags_type,deferred_type,BASE>();
 }
 
-template <class Expr1,class Expr2,class Attr,class Configure,class EndInterruptEvent>
+template <class StateNameTag,class Expr1,class Expr2,class Attr,class Configure,class EndInterruptEvent>
 inline
 func_state<
+StateNameTag,
 typename ::boost::mpl::eval_if<
     typename proto::matches<Expr1,BuildActionSequence>::type,
     boost::result_of<BuildActionSequence(Expr1)>,
@@ -1259,12 +1292,13 @@
>::type flags_type;
     typedef typename boost::result_of<BuildDeferred(Configure)>::type deferred_type;
 
- return func_state<entry_action,exit_action,attributes_type,flags_type,deferred_type>();
+ return func_state<StateNameTag,entry_action,exit_action,attributes_type,flags_type,deferred_type>();
 }
 
-template <class Expr1,class Expr2,class Attr,class EndInterruptEvent>
+template <class StateNameTag,class Expr1,class Expr2,class Attr,class EndInterruptEvent>
 inline
 func_state<
+StateNameTag,
 typename ::boost::mpl::eval_if<
     typename proto::matches<Expr1,BuildActionSequence>::type,
     boost::result_of<BuildActionSequence(Expr1)>,
@@ -1281,13 +1315,14 @@
         typedef typename boost::result_of<BuildActionSequence(Expr1)>::type entry_action;
         typedef typename boost::result_of<BuildActionSequence(Expr2)>::type exit_action;
     typedef typename boost::result_of<BuildAttributes(Attr)>::type attributes_type;
- return func_state<entry_action,exit_action,attributes_type,
+ return func_state<StateNameTag,entry_action,exit_action,attributes_type,
                      ::boost::mpl::vector< boost::msm::InterruptedFlag, boost::msm::EndInterruptFlag<EndInterruptEvent> > >();
 }
 
-template <class Expr1,class Expr2,class EndInterruptEvent>
+template <class StateNameTag,class Expr1,class Expr2,class EndInterruptEvent>
 inline
 func_state<
+StateNameTag,
 typename ::boost::mpl::eval_if<
     typename proto::matches<Expr1,BuildActionSequence>::type,
     boost::result_of<BuildActionSequence(Expr1)>,
@@ -1303,14 +1338,15 @@
 {
         typedef typename boost::result_of<BuildActionSequence(Expr1)>::type entry_action;
         typedef typename boost::result_of<BuildActionSequence(Expr2)>::type exit_action;
- return func_state<entry_action,exit_action,
+ return func_state<StateNameTag,entry_action,exit_action,
                       ::boost::fusion::vector<>,
                       ::boost::mpl::vector< boost::msm::InterruptedFlag, boost::msm::EndInterruptFlag<EndInterruptEvent> > >();
 }
 
-template <class Expr1,class EndInterruptEvent>
+template <class StateNameTag,class Expr1,class EndInterruptEvent>
 inline
 func_state<
+StateNameTag,
 typename ::boost::mpl::eval_if<
     typename proto::matches<Expr1,BuildActionSequence>::type,
     boost::result_of<BuildActionSequence(Expr1)>,
@@ -1322,13 +1358,14 @@
 build_interrupt_state(EndInterruptEvent const&, Expr1 const&)
 {
         typedef typename boost::result_of<BuildActionSequence(Expr1)>::type entry_action;
- return func_state<entry_action,NoAction, ::boost::fusion::vector<>,
+ return func_state<StateNameTag,entry_action,NoAction, ::boost::fusion::vector<>,
                      ::boost::mpl::vector<boost::msm::InterruptedFlag, boost::msm::EndInterruptFlag<EndInterruptEvent> > >();
 }
 
-template <class EndInterruptEvent>
+template <class StateNameTag,class EndInterruptEvent>
 inline
 func_state<
+StateNameTag,
 NoAction,
 NoAction,
 ::boost::fusion::vector<>,
@@ -1336,13 +1373,14 @@
>
 build_interrupt_state(EndInterruptEvent const&)
 {
- return func_state<NoAction,NoAction, ::boost::fusion::vector<>,
+ return func_state<StateNameTag,NoAction,NoAction, ::boost::fusion::vector<>,
                       ::boost::mpl::vector<boost::msm::InterruptedFlag, boost::msm::EndInterruptFlag<EndInterruptEvent> > >();
 }
 
-template <int ZoneIndex,class Expr1,class Expr2,class Attr,class Configure,class BASE>
+template <class StateNameTag,int ZoneIndex,class Expr1,class Expr2,class Attr,class Configure,class BASE>
 inline
 entry_func_state<
+StateNameTag,
 ZoneIndex,
 typename ::boost::mpl::eval_if<
     typename proto::matches<Expr1,BuildActionSequence>::type,
@@ -1364,12 +1402,13 @@
     typedef typename boost::result_of<BuildFlags(Configure)>::type flags_type;
     typedef typename boost::result_of<BuildDeferred(Configure)>::type deferred_type;
     typedef typename boost::result_of<BuildAttributes(Attr)>::type attributes_type;
- return entry_func_state<ZoneIndex,entry_action,exit_action,attributes_type,flags_type,deferred_type,BASE>();
+ return entry_func_state<StateNameTag,ZoneIndex,entry_action,exit_action,attributes_type,flags_type,deferred_type,BASE>();
 }
 
-template <int ZoneIndex,class Expr1,class Expr2,class Attr,class Configure>
+template <class StateNameTag,int ZoneIndex,class Expr1,class Expr2,class Attr,class Configure>
 inline
 entry_func_state<
+StateNameTag,
 ZoneIndex,
 typename ::boost::mpl::eval_if<
     typename proto::matches<Expr1,BuildActionSequence>::type,
@@ -1390,12 +1429,13 @@
     typedef typename boost::result_of<BuildFlags(Configure)>::type flags_type;
     typedef typename boost::result_of<BuildDeferred(Configure)>::type deferred_type;
     typedef typename boost::result_of<BuildAttributes(Attr)>::type attributes_type;
- return entry_func_state<ZoneIndex,entry_action,exit_action,attributes_type,flags_type,deferred_type>();
+ return entry_func_state<StateNameTag,ZoneIndex,entry_action,exit_action,attributes_type,flags_type,deferred_type>();
 }
 
-template <int ZoneIndex,class Expr1,class Expr2,class Attr>
+template <class StateNameTag,int ZoneIndex,class Expr1,class Expr2,class Attr>
 inline
 entry_func_state<
+StateNameTag,
 ZoneIndex,
 typename ::boost::mpl::eval_if<
     typename proto::matches<Expr1,BuildActionSequence>::type,
@@ -1412,12 +1452,13 @@
         typedef typename boost::result_of<BuildActionSequence(Expr1)>::type entry_action;
         typedef typename boost::result_of<BuildActionSequence(Expr2)>::type exit_action;
     typedef typename boost::result_of<BuildAttributes(Attr)>::type attributes_type;
- return entry_func_state<ZoneIndex,entry_action,exit_action,attributes_type>();
+ return entry_func_state<StateNameTag,ZoneIndex,entry_action,exit_action,attributes_type>();
 }
 
-template <int ZoneIndex,class Expr1,class Expr2>
+template <class StateNameTag,int ZoneIndex,class Expr1,class Expr2>
 inline
 entry_func_state<
+StateNameTag,
 ZoneIndex,
 typename ::boost::mpl::eval_if<
     typename proto::matches<Expr1,BuildActionSequence>::type,
@@ -1432,12 +1473,13 @@
 {
         typedef typename boost::result_of<BuildActionSequence(Expr1)>::type entry_action;
         typedef typename boost::result_of<BuildActionSequence(Expr2)>::type exit_action;
- return entry_func_state<ZoneIndex,entry_action,exit_action>();
+ return entry_func_state<StateNameTag,ZoneIndex,entry_action,exit_action>();
 }
 
-template <int ZoneIndex,class Expr1>
+template <class StateNameTag,int ZoneIndex,class Expr1>
 inline
 entry_func_state<
+StateNameTag,
 ZoneIndex,
 typename ::boost::mpl::eval_if<
     typename proto::matches<Expr1,BuildActionSequence>::type,
@@ -1448,24 +1490,26 @@
 build_entry_state(Expr1 const& )
 {
         typedef typename boost::result_of<BuildActionSequence(Expr1)>::type entry_action;
- return entry_func_state<ZoneIndex,entry_action,NoAction>();
+ return entry_func_state<StateNameTag,ZoneIndex,entry_action,NoAction>();
 }
 
-template <int ZoneIndex>
+template <class StateNameTag,int ZoneIndex>
 inline
 entry_func_state<
+StateNameTag,
 ZoneIndex,
 NoAction,
 NoAction
>
 build_entry_state()
 {
- return entry_func_state<ZoneIndex,NoAction,NoAction>();
+ return entry_func_state<StateNameTag,ZoneIndex,NoAction,NoAction>();
 }
 
-template <class Event,class Expr1,class Expr2,class Attr,class Configure,class BASE>
+template <class StateNameTag,class Event,class Expr1,class Expr2,class Attr,class Configure,class BASE>
 inline
 exit_func_state<
+StateNameTag,
 Event,
 typename ::boost::mpl::eval_if<
     typename proto::matches<Expr1,BuildActionSequence>::type,
@@ -1487,12 +1531,13 @@
     typedef typename boost::result_of<BuildFlags(Configure)>::type flags_type;
     typedef typename boost::result_of<BuildDeferred(Configure)>::type deferred_type;
     typedef typename boost::result_of<BuildAttributes(Attr)>::type attributes_type;
- return exit_func_state<Event,entry_action,exit_action,attributes_type,flags_type,deferred_type,BASE>();
+ return exit_func_state<StateNameTag,Event,entry_action,exit_action,attributes_type,flags_type,deferred_type,BASE>();
 }
 
-template <class Event,class Expr1,class Expr2,class Attr,class Configure>
+template <class StateNameTag,class Event,class Expr1,class Expr2,class Attr,class Configure>
 inline
 exit_func_state<
+StateNameTag,
 Event,
 typename ::boost::mpl::eval_if<
     typename proto::matches<Expr1,BuildActionSequence>::type,
@@ -1513,12 +1558,13 @@
     typedef typename boost::result_of<BuildFlags(Configure)>::type flags_type;
     typedef typename boost::result_of<BuildDeferred(Configure)>::type deferred_type;
     typedef typename boost::result_of<BuildAttributes(Attr)>::type attributes_type;
- return exit_func_state<Event,entry_action,exit_action,attributes_type,flags_type,deferred_type>();
+ return exit_func_state<StateNameTag,Event,entry_action,exit_action,attributes_type,flags_type,deferred_type>();
 }
 
-template <class Event,class Expr1,class Expr2,class Attr>
+template <class StateNameTag,class Event,class Expr1,class Expr2,class Attr>
 inline
 exit_func_state<
+StateNameTag,
 Event,
 typename ::boost::mpl::eval_if<
     typename proto::matches<Expr1,BuildActionSequence>::type,
@@ -1535,12 +1581,13 @@
         typedef typename boost::result_of<BuildActionSequence(Expr1)>::type entry_action;
         typedef typename boost::result_of<BuildActionSequence(Expr2)>::type exit_action;
     typedef typename boost::result_of<BuildAttributes(Attr)>::type attributes_type;
- return exit_func_state<Event,entry_action,exit_action,attributes_type>();
+ return exit_func_state<StateNameTag,Event,entry_action,exit_action,attributes_type>();
 }
 
-template <class Event,class Expr1,class Expr2>
+template <class StateNameTag,class Event,class Expr1,class Expr2>
 inline
 exit_func_state<
+StateNameTag,
 Event,
 typename ::boost::mpl::eval_if<
     typename proto::matches<Expr1,BuildActionSequence>::type,
@@ -1555,12 +1602,13 @@
 {
         typedef typename boost::result_of<BuildActionSequence(Expr1)>::type entry_action;
         typedef typename boost::result_of<BuildActionSequence(Expr2)>::type exit_action;
- return exit_func_state<Event,entry_action,exit_action>();
+ return exit_func_state<StateNameTag,Event,entry_action,exit_action>();
 }
 
-template <class Event,class Expr1>
+template <class StateNameTag,class Event,class Expr1>
 inline
 exit_func_state<
+StateNameTag,
 Event,
 typename ::boost::mpl::eval_if<
     typename proto::matches<Expr1,BuildActionSequence>::type,
@@ -1571,24 +1619,26 @@
 build_exit_state(Event const&, Expr1 const& )
 {
         typedef typename boost::result_of<BuildActionSequence(Expr1)>::type entry_action;
- return exit_func_state<Event,entry_action,NoAction>();
+ return exit_func_state<StateNameTag,Event,entry_action,NoAction>();
 }
 
-template <class Event>
+template <class StateNameTag,class Event>
 inline
 exit_func_state<
+StateNameTag,
 Event,
 NoAction,
 NoAction
>
 build_exit_state(Event const&)
 {
- return exit_func_state<Event,NoAction,NoAction>();
+ return exit_func_state<StateNameTag,Event,NoAction,NoAction>();
 }
 
-template <int ZoneIndex,class Expr1,class Expr2,class Attr,class Configure,class BASE>
+template <class StateNameTag,int ZoneIndex,class Expr1,class Expr2,class Attr,class Configure,class BASE>
 inline
 explicit_entry_func_state<
+StateNameTag,
 ZoneIndex,
 typename ::boost::mpl::eval_if<
     typename proto::matches<Expr1,BuildActionSequence>::type,
@@ -1610,12 +1660,13 @@
     typedef typename boost::result_of<BuildFlags(Configure)>::type flags_type;
     typedef typename boost::result_of<BuildDeferred(Configure)>::type deferred_type;
     typedef typename boost::result_of<BuildAttributes(Attr)>::type attributes_type;
- return explicit_entry_func_state<ZoneIndex,entry_action,exit_action,attributes_type,flags_type,deferred_type,BASE>();
+ return explicit_entry_func_state<StateNameTag,ZoneIndex,entry_action,exit_action,attributes_type,flags_type,deferred_type,BASE>();
 }
 
-template <int ZoneIndex,class Expr1,class Expr2,class Attr,class Configure>
+template <class StateNameTag,int ZoneIndex,class Expr1,class Expr2,class Attr,class Configure>
 inline
 explicit_entry_func_state<
+StateNameTag,
 ZoneIndex,
 typename ::boost::mpl::eval_if<
     typename proto::matches<Expr1,BuildActionSequence>::type,
@@ -1636,12 +1687,13 @@
     typedef typename boost::result_of<BuildFlags(Configure)>::type flags_type;
     typedef typename boost::result_of<BuildDeferred(Configure)>::type deferred_type;
     typedef typename boost::result_of<BuildAttributes(Attr)>::type attributes_type;
- return explicit_entry_func_state<ZoneIndex,entry_action,exit_action,attributes_type,flags_type,deferred_type>();
+ return explicit_entry_func_state<StateNameTag,ZoneIndex,entry_action,exit_action,attributes_type,flags_type,deferred_type>();
 }
 
-template <int ZoneIndex,class Expr1,class Expr2,class Attr>
+template <class StateNameTag,int ZoneIndex,class Expr1,class Expr2,class Attr>
 inline
 explicit_entry_func_state<
+StateNameTag,
 ZoneIndex,
 typename ::boost::mpl::eval_if<
     typename proto::matches<Expr1,BuildActionSequence>::type,
@@ -1658,12 +1710,13 @@
         typedef typename boost::result_of<BuildActionSequence(Expr1)>::type entry_action;
         typedef typename boost::result_of<BuildActionSequence(Expr2)>::type exit_action;
     typedef typename boost::result_of<BuildAttributes(Attr)>::type attributes_type;
- return explicit_entry_func_state<ZoneIndex,entry_action,exit_action,attributes_type>();
+ return explicit_entry_func_state<StateNameTag,ZoneIndex,entry_action,exit_action,attributes_type>();
 }
 
-template <int ZoneIndex,class Expr1,class Expr2>
+template <class StateNameTag,int ZoneIndex,class Expr1,class Expr2>
 inline
 explicit_entry_func_state<
+StateNameTag,
 ZoneIndex,
 typename ::boost::mpl::eval_if<
     typename proto::matches<Expr1,BuildActionSequence>::type,
@@ -1678,12 +1731,13 @@
 {
         typedef typename boost::result_of<BuildActionSequence(Expr1)>::type entry_action;
         typedef typename boost::result_of<BuildActionSequence(Expr2)>::type exit_action;
- return explicit_entry_func_state<ZoneIndex,entry_action,exit_action>();
+ return explicit_entry_func_state<StateNameTag,ZoneIndex,entry_action,exit_action>();
 }
 
-template <int ZoneIndex,class Expr1>
+template <class StateNameTag,int ZoneIndex,class Expr1>
 inline
 explicit_entry_func_state<
+StateNameTag,
 ZoneIndex,
 typename ::boost::mpl::eval_if<
     typename proto::matches<Expr1,BuildActionSequence>::type,
@@ -1694,19 +1748,20 @@
 build_explicit_entry_state(Expr1 const& )
 {
         typedef typename boost::result_of<BuildActionSequence(Expr1)>::type entry_action;
- return explicit_entry_func_state<ZoneIndex,entry_action,NoAction>();
+ return explicit_entry_func_state<StateNameTag,ZoneIndex,entry_action,NoAction>();
 }
 
-template <int ZoneIndex>
+template <class StateNameTag,int ZoneIndex>
 inline
 explicit_entry_func_state<
+StateNameTag,
 ZoneIndex,
 NoAction,
 NoAction
>
 build_explicit_entry_state()
 {
- return explicit_entry_func_state<ZoneIndex,NoAction,NoAction>();
+ return explicit_entry_func_state<StateNameTag,ZoneIndex,NoAction,NoAction>();
 }
 
 


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