|
9 | 9 | #if (__cplusplus < 201305L && _MSC_VER < 1900) |
10 | 10 | #error "[Boost::ext].SML requires C++14 support (Clang-3.4+, GCC-5.1+, MSVC-2015+)" |
11 | 11 | #else |
12 | | -#define BOOST_SML_VERSION 1'1'5 |
| 12 | +#define BOOST_SML_VERSION 1'1'6 |
13 | 13 | #define BOOST_SML_NAMESPACE_BEGIN \ |
14 | 14 | namespace boost { \ |
15 | 15 | inline namespace ext { \ |
16 | 16 | namespace sml { \ |
17 | | - inline namespace v1_1_5 { |
| 17 | + inline namespace v1_1_6 { |
18 | 18 | #define BOOST_SML_NAMESPACE_END \ |
19 | 19 | } \ |
20 | 20 | } \ |
@@ -1426,7 +1426,7 @@ struct sm_impl : aux::conditional_t<aux::is_empty<typename TSM::sm>::value, aux: |
1426 | 1426 | __BOOST_SML_REQUIRES(!aux::is_base_of<get_generic_t<TEvent>, events_ids_t>::value && |
1427 | 1427 | !aux::is_base_of<get_mapped_t<TEvent>, events_ids_t>::value && |
1428 | 1428 | !aux::is_same<get_event_t<TEvent>, initial>::value)> |
1429 | | - bool process_internal_events(const TEvent&, TDeps &, TSubs &, Ts &&...) { |
| 1429 | + bool process_internal_events(const TEvent &, TDeps &, TSubs &, Ts &&...) { |
1430 | 1430 | return false; |
1431 | 1431 | } |
1432 | 1432 | template <class TEvent, class TDeps, class TSubs, class... Ts, |
@@ -1720,7 +1720,7 @@ class sm { |
1720 | 1720 | aux::get<sm_impl<TSM>>(sub_sms_).start(deps_, sub_sms_); |
1721 | 1721 | } |
1722 | 1722 | template <class... TDeps, __BOOST_SML_REQUIRES((sizeof...(TDeps) > 1) && aux::is_unique_t<TDeps...>::value)> |
1723 | | - explicit sm(TDeps &&...deps) : deps_{aux::init{}, aux::pool<TDeps...>{deps...}}, sub_sms_{aux::pool<TDeps...>{deps...}} { |
| 1723 | + explicit sm(TDeps &&... deps) : deps_{aux::init{}, aux::pool<TDeps...>{deps...}}, sub_sms_{aux::pool<TDeps...>{deps...}} { |
1724 | 1724 | aux::get<sm_impl<TSM>>(sub_sms_).start(deps_, sub_sms_); |
1725 | 1725 | } |
1726 | 1726 | sm(aux::init, deps_t &deps) : deps_{deps}, sub_sms_{deps} { aux::get<sm_impl<TSM>>(sub_sms_).start(deps_, sub_sms_); } |
@@ -1750,7 +1750,13 @@ class sm { |
1750 | 1750 | using sm_impl_t = sm_impl<typename TSM::template rebind<type>>; |
1751 | 1751 | using state_t = typename sm_impl_t::state_t; |
1752 | 1752 | using states_ids_t = typename sm_impl_t::states_ids_t; |
1753 | | - return aux::get_id<state_t, typename TState::type>((states_ids_t *)0) == aux::cget<sm_impl_t>(sub_sms_).current_state_[0]; |
| 1753 | + auto result = false; |
| 1754 | + visit_current_states<T>([&](auto state) { |
| 1755 | + (void)state; |
| 1756 | + result |= (aux::get_id<state_t, typename TState::type>((states_ids_t *)0) == |
| 1757 | + aux::get_id<state_t, typename decltype(state)::type>((states_ids_t *)0)); |
| 1758 | + }); |
| 1759 | + return result; |
1754 | 1760 | } |
1755 | 1761 | template <class T = aux::identity<sm_t>, template <class...> class TState> |
1756 | 1762 | bool is(const TState<terminate_state> &) const { |
|
0 commit comments