As per @Eljay suggestion I moved the definition of process()
functions after the class declarations and it works fine:
class IdleState : State<StateMachine<TransitionMap, RunState, IdleState>>
{
public:
/* Use parent constructor */
using State<StateMachine<TransitionMap, RunState, IdleState>>::State;
void process() override;
};
class RunState : State<StateMachine<TransitionMap, RunState, IdleState>>
{
public:
/* Use parent constructor */
using State<StateMachine<TransitionMap, RunState, IdleState>>::State;
void process() override;
};
void IdleState::process()
{
std::cout << "IDLE" << std::endl;
state_machine_->emitEvent<IdleState>(StartEvent{});
}
void RunState::process()
{
std::cout << "RUN" << std::endl;
state_machine_->emitEvent<RunState>(StopEvent{});
}