diff --git a/src/osuparser.cpp b/src/osuparser.cpp index 237b68d..4084c83 100644 --- a/src/osuparser.cpp +++ b/src/osuparser.cpp @@ -177,13 +177,19 @@ inline std::string checkAndRemove(const std::string &str, const std::string &pre enum_type value;\ ss >> value; +#define ENUM_D(enum_type, default) \ + std::string val = checkAndRemove(line, _prefix);\ + std::stringstream ss(val);\ + enum_type value = default;\ + ss >> value; + #define ENUM(name, ...) #define VAR_ENUM(section, name, enum_type) \ VAR_GENERIC(section, name, ENUM_GENERIC(enum_type)) #define VAR_ENUM_P(section, name, enum_type, prefix) \ VAR_GENERIC_P(section, name, prefix, ENUM_GENERIC(enum_type)) #define VAR_ENUM_D(section, name, enum_type, default) \ - VAR_GENERIC_D(section, name, enum_type::default, ENUM_GENERIC(enum_type)) + VAR_GENERIC_D(section, name, enum_type::default, ENUM_D(enum_type, enum_type::default)) #define STRUCT_INPUT_STREAM_OP(name, ...) #define STRUCT_OUTPUT_STREAM_OP(name, ...)