Opened 8 years ago
Last modified 8 years ago
#10722 reopened Bugs
msm gives compilation errors when using state machine constructors with arguments
| Reported by: | Owned by: | Christophe Henry | |
|---|---|---|---|
| Milestone: | Component: | msm | |
| Version: | Boost 1.57.0 | Severity: | Problem |
| Keywords: | Cc: |
Description
This code compiles fine with boost 1.55.0 but fails on 1.56.0. Checked on MSVC2012 and gcc.
#include <boost/msm/back/state_machine.hpp> // back-end
#include <boost/msm/back/tools.hpp>
#include <boost/msm/front/state_machine_def.hpp> // front-end
#include <boost/msm/front/functor_row.hpp>
#include <boost/msm/front/euml/operator.hpp>
namespace msm = boost::msm;
namespace mpl = boost::mpl;
using namespace msm::front;
struct Substate : public msm::front::state<> { };
struct State_ : public msm::front::state_machine_def<State_>
{
State_(int) {}
State_() {}
struct transition_table : mpl::vector<
// Start Event Next Action Guard
// +------------+-------------+------------+-----------+------------+
Row < Substate , none , none , none , none >
> {};
typedef Substate initial_state;
};
typedef msm::back::state_machine<State_> State;
// machine itself
struct TestFSM_ : public msm::front::state_machine_def<TestFSM_>
{
TestFSM_(int) {}
TestFSM_() {}
struct transition_table : mpl::vector<
// Start Event Next Action Guard
// +------------+--------------+------------+-----------+-----------+
Row < State , none , none , none , none >
> {};
typedef State initial_state;
};
typedef msm::back::state_machine<TestFSM_> TestFSM;
void start()
{
TestFSM(msm::back::states_ << State(10), 10);
}
Error output from MSVC2012 looks like this:
1> test.cpp 1>c:\test\boost\boost\core\enable_if.hpp(36): error C2039: 'value' : is not a member of 'boost::is_convertible<From,To>' 1> with 1> [ 1> From=boost::fusion::vector1<boost::msm::back::state_machine<State_>>, 1> To=boost::msm::back::state_machine<State_> 1> ] 1> c:\test\boost\boost\type_traits\is_convertible.hpp(486) : see reference to class template instantiation 'boost::enable_if<Cond,T>' being compiled 1> with 1> [ 1> Cond=boost::is_convertible<boost::fusion::vector1<boost::msm::back::state_machine<State_>>,boost::msm::back::state_machine<State_>>, 1> T=void 1> ] 1> c:\test\boost\boost\core\enable_if.hpp(59) : see reference to class template instantiation 'boost::is_convertible<From,To>' being compiled 1> with 1> [ 1> From=boost::fusion::vector1<boost::msm::back::state_machine<State_>>, 1> To=boost::msm::back::state_machine<State_> 1> ] 1> c:\test\boost\boost\fusion\container\vector\convert.hpp(46) : see reference to class template instantiation 'boost::disable_if<Cond,T>' being compiled 1> with 1> [ 1> Cond=boost::is_convertible<boost::fusion::vector1<boost::msm::back::state_machine<State_>>,boost::msm::back::state_machine<State_>>, 1> T=void 1> ] 1> c:\test\boost\boost\msm\back\state_machine.hpp(1564) : see reference to function template instantiation 'boost::fusion::vector1<T0> boost::fusion::as_vector<boost::fusion::cons<Car,Cdr>>(const Sequence &)' being compiled 1> with 1> [ 1> T0=boost::msm::back::state_machine<State_>, 1> Car=boost::msm::back::state_machine<State_>, 1> Cdr=boost::fusion::nil_, 1> Sequence=boost::fusion::cons<boost::msm::back::state_machine<State_>,boost::fusion::nil_> 1> ] 1> c:\test\boost\boost\msm\back\state_machine.hpp(1655) : see reference to function template instantiation 'void boost::msm::back::state_machine<A0>::set_states<Expr>(const Expr &)' being compiled 1> with 1> [ 1> A0=TestFSM_, 1> Expr=boost::msm::msm_terminal<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::shift_left,boost::proto::argsns_::list2<const boost::msm::back::define_states_creation<> &,boost::msm::msm_terminal<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<const boost::msm::back::state_machine<State_> &>,0>>>,2>> 1> ] 1> c:\test\boost\boost\msm\back\state_machine.hpp(1655) : see reference to function template instantiation 'void boost::msm::back::state_machine<A0>::set_states<Expr>(const Expr &)' being compiled 1> with 1> [ 1> A0=TestFSM_, 1> Expr=boost::msm::msm_terminal<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::shift_left,boost::proto::argsns_::list2<const boost::msm::back::define_states_creation<> &,boost::msm::msm_terminal<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<const boost::msm::back::state_machine<State_> &>,0>>>,2>> 1> ] 1> c:\test\ffc\audioextractor\dataanalyzer\engines\test.cpp(47) : see reference to function template instantiation 'boost::msm::back::state_machine<A0>::state_machine<boost::msm::msm_terminal<Expr>,int>(const boost::msm::msm_terminal<Expr> &,ARG0,void *)' being compiled 1> with 1> [ 1> A0=TestFSM_, 1> Expr=boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::shift_left,boost::proto::argsns_::list2<const boost::msm::back::define_states_creation<> &,boost::msm::msm_terminal<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<const boost::msm::back::state_machine<State_> &>,0>>>,2>, 1> ARG0=int 1> ] 1> c:\test\ffc\audioextractor\dataanalyzer\engines\test.cpp(47) : see reference to function template instantiation 'boost::msm::back::state_machine<A0>::state_machine<boost::msm::msm_terminal<Expr>,int>(const boost::msm::msm_terminal<Expr> &,ARG0,void *)' being compiled 1> with 1> [ 1> A0=TestFSM_, 1> Expr=boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::shift_left,boost::proto::argsns_::list2<const boost::msm::back::define_states_creation<> &,boost::msm::msm_terminal<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<const boost::msm::back::state_machine<State_> &>,0>>>,2>, 1> ARG0=int 1> ] 1>c:\test\boost\boost\core\enable_if.hpp(36): error C2065: 'value' : undeclared identifier 1>c:\test\boost\boost\core\enable_if.hpp(36): error C2975: 'B' : invalid template argument for 'boost::enable_if_c', expected compile-time constant expression 1> c:\test\boost\boost\core\enable_if.hpp(27) : see declaration of 'B'
Change History (3)
follow-up: 2 comment:1 by , 8 years ago
| Milestone: | To Be Determined → Boost 1.57.0 |
|---|---|
| Resolution: | → fixed |
| Status: | new → closed |
comment:2 by , 8 years ago
I've tried with boost 1.57.0 b1 with MSVC2012 and problem still occures. Can you reopen this?
comment:3 by , 8 years ago
| Milestone: | Boost 1.57.0 |
|---|---|
| Resolution: | fixed |
| Status: | closed → reopened |
| Version: | Boost 1.56.0 → Boost 1.57.0 |
Note:
See TracTickets
for help on using tickets.

This works in develop (and therefore 1.57). Can you confirm?