HFSM2 can be configured to satisfy particular requirements using:

Heavyweight advanced features are enabled using relevant feature macros (e.g. HFSM2_ENABLE_SERIALIZATION)

Type configuration can be used to adjust the types used in an FSM instance and sometimes require a particular feature to be enabled (e.g. hfsm2::Config::RandomT<T> defining the type of the PRNG used in utility theory transitions, HFSM2_ENABLE_UTILITY_THEORY requires to be defined)