Dear Boost users, i am currently writing a driver for the ADS1256 chip with Boost.MSM. Yes, there are other drivers. I do this for training and fun. During the startup phase i need to defer the requests from the user as the SPI bus is not yet available. To model the behaviour the most correct, i tried to model it with MSM. In the transition table, i use the "Defer" action to defer these events. In my Idle state, after the startup phase, there is a transition with this defered event going to the "work" states. In the debugger i can see, that the defered_event_queue holds one defered event and it is of my type but it is not processed. I did use boost 1.67.0 (from debian buster ) and also 1.74.0 (self compiled) to test this. My program can be also compiled under Windows and VS2019 as i handled the hardware interfacing with a abstract class. It works under Windows and 1.74.0. With VS2017 and 1.67.0 it also does not work. Under Linux and gcc it always stops at the Idle state where i wait for the defered event. At the end is my transition table. Any ideas are welcome! Georg // clang-format off struct transition_table : mpl::vector< // +----------------+-------------------+----------------+---------------------------+----------------------+ // Region 0 // +----------------+-------------------+----------------+---------------------------+----------------------+ // Start Event Next Action Guard // +----------------+-------------------+----------------+---------------------------+----------------------+ Row < NotIntialized , ev_Init , WaitDRDYID , none , none >, Row < WaitDRDYID , ev_CheckFlags , ReadID , none , IsDrdy0 >, Row < ReadID , ev_CheckFlags , none , none , none >, Row < ReadID , Spi::Reply , ReadIDFailed , none , IsIDNotOk >, Row < ReadID , Spi::Reply , Idle , none , IsIDOk >, // during the startup phase these event must be defered Row < NotIntialized , ev_MultiStart , none , Defer , none >, Row < WaitDRDYID , ev_MultiStart , none , Defer , none >, Row < ReadID , ev_MultiStart , none , Defer , none >, // +----------------+-------------------+----------------+---------------------------+----------------------+ Row < Idle , ev_CheckFlags , none , none , none >, Row < Idle , ev_MultiStart , MConfigWaitDRDY, none , none >, // +----------------+-------------------+----------------+---------------------------+----------------------+ Row < MConfigWaitDRDY, ev_CheckFlags , MSwitchConfig , none , IsDrdy0 >, Row < MSwitchConfig , ev_CheckFlags , none , none , none >, Row < MSwitchConfig , Spi::Reply , MMuxWaitDRDY , none , IsECNotFailed >, Row < MMuxWaitDRDY , ev_CheckFlags , MSwitchMux , none , IsDrdy0 >, Row < MSwitchMux , ev_CheckFlags , none , none , none >, Row < MSwitchMux , Spi::Reply , MSync , none , IsECNotFailed >, Row < MSync , Spi::Reply , MDataWaitDRDY , none , IsECNotFailed >, Row < MDataWaitDRDY , ev_CheckFlags , MReadData , none , IsDrdy0 >, Row < MReadData , ev_CheckFlags , none , none , none >, Row < MReadData , Spi::Reply , Idle , WorkDone , IsWorkDone >, Row < MReadData , Spi::Reply , MMuxWaitDRDY , RemoveDoneWork , IsStillWorkTodo >, // +----------------+-------------------+----------------+---------------------------+----------------------+ // Region 1 // +----------------+-------------------+----------------+---------------------------+----------------------+ Row < DrdyUndefined , ev_DRDY_0 , Drdy0 , none , none >, Row < DrdyUndefined , ev_DRDY_1 , Drdy1 , none , none >, Row < Drdy0 , ev_DRDY_0 , none , none , none >, Row < Drdy0 , ev_DRDY_1 , Drdy1 , none , none >, Row < Drdy1 , ev_DRDY_0 , Drdy0 , none , none >, Row < Drdy1 , ev_DRDY_1 , none , none , none >, // +----------------+-------------------+----------------+---------------------------+----------------------+ // Region 2 // +----------------+-------------------+----------------+---------------------------+----------------------+ // Start Event Next Action Guard // +----------------+-------------------+----------------+---------------------------+----------------------+ Row < AllOk , Spi::Reply , ErrorMode , none , IsECFailed > // +----------------+-------------------+----------------+---------------------------+----------------------+ > {}; // clang-format on