diff --git a/enum.h b/enum.h index 6edaac1..bec50fe 100644 --- a/enum.h +++ b/enum.h @@ -364,6 +364,7 @@ continue_with(T, U value) { return value; } // Values array declaration helper. +//! Get intrinsic value of an (Enum::value) by taking advantage of C-conversion's parentheses priority template struct _eat_assign { explicit BETTER_ENUMS_CONSTEXPR_ _eat_assign(EnumType value) : _value(value) @@ -498,7 +499,7 @@ struct _initialize_at_program_start { // Array generation macros. #define BETTER_ENUMS_EAT_ASSIGN_SINGLE(EnumType, index, expression) \ - static_cast(static_cast<::better_enums::_eat_assign>(EnumType::expression)), + (EnumType)((::better_enums::_eat_assign)EnumType::expression), #define BETTER_ENUMS_EAT_ASSIGN(EnumType, ...) \ BETTER_ENUMS_ID( \ @@ -690,8 +691,11 @@ static ::better_enums::_initialize_at_program_start \ \ enum _putNamesInThisScopeAlso { __VA_ARGS__ }; \ \ +_Pragma("GCC diagnostic push") \ +_Pragma("GCC diagnostic ignored \"-Wold-style-cast\"") \ BETTER_ENUMS_CONSTEXPR_ const Enum _value_array[] = \ { BETTER_ENUMS_ID(BETTER_ENUMS_EAT_ASSIGN(Enum, __VA_ARGS__)) }; \ +_Pragma("GCC diagnostic pop") \ \ BETTER_ENUMS_ID(GenerateStrings(Enum, __VA_ARGS__)) \ \