#include template std::optional DecodeEnum(std::string_view str) { constexpr std::size_t ValueCount = static_cast(T::Max) + 1; for (std::size_t i = 0; i < ValueCount; ++i) { T value = static_cast(i); if (str == EnumToString(value)) return value; } return {}; }