In your opinion MSM (Boost Meta State Machine) is suitable for embedded application? In my case the application should run on Cortex-M4F MCU with 1 MB of Flash and 192 KB RAM. I like the fact that MSM gives you a more structured approach to define hierarchical state machine with orthogonal regions but it also introduces some overhead. I was wondering if such approach is feasible for embedded applications with memory constrains or should I go "back" to the more traditional "switch case" state machines.
It really depends on how often you will need to use it and how much value it adds to your project in terms of time, ease of development, readability, portability, etc.
If you have all the time in the world you could potentially make something that would be more purpose built and specified for to your application needs.
RAM is precious in your scenario (of course, depending on your application). I suggest writing a somewhat non-trivial state machine using Boost (or use Boot's example), examine RAM usage, and then make the determination if your project has the [RAM] budget for it.
Note, boost makes the tradeoff to use more code space (via templating) than run-time memory. Further, this tradeoff optimizes runtime performance in that the processor is much more efficient at fetching instructions from flash than it is at fetching data from RAM (in mostly all cases when using a Cortex-M4F).
Remember, C++11 & 14 compilers are much smarter than they used to be for meta programming / templates, so code-bloat shouldn't really be of concern because the tradeoff / cost to using Boost MSM may worth it for complex, non-trivial state machines.
Check out Boost MSM-lite (experimental), which attempts to address many of the concerns by reducing MSM to a finite set of facilities of vanilla MSM.