#pragma once /* MOUNT CONTROL COMPONENTS LIBRARY */ /* FINITE-STATE MACHINE IMPLEMENTATION */ #include #include "mcc_fsm_utils.h" namespace mcc::fsm { namespace traits { template concept fsm_event_c = std::is_default_constructible_v && std::is_move_constructible_v && std::movable && requires { { T::ID } -> std::same_as; // static constant member of event identificator }; template concept fsm_state_c = std::is_default_constructible_v && std::is_move_constructible_v && std::movable && requires { [](std::type_identity) {}(T::transition_t); { T::ID } -> std::same_as; // static constant member of state identificator }; } // namespace traits } // namespace mcc::fsm