The warning has been active for a few releases now, first only in user code, later in system headers, and finally as an error by default. Therefore, we believe it is now time to transition into a hard error, as required by the C++ Standard. The main affected C++ projects have by now fixed the error, or there's a pending patch for review that does it. Fixes #59036
21 lines
762 B
C++
21 lines
762 B
C++
// System header for testing that -Wenum-constexpr-conversion leads to an error
|
|
// when included in user code, or when the system macro is used.
|
|
|
|
enum SystemEnum
|
|
{
|
|
a = 0,
|
|
b = 1,
|
|
};
|
|
|
|
void testValueInRangeOfEnumerationValuesInSystemHeader()
|
|
{
|
|
constexpr SystemEnum x1 = static_cast<SystemEnum>(123);
|
|
// expected-error@-1 {{constexpr variable 'x1' must be initialized by a constant expression}}
|
|
// expected-note@-2 {{integer value 123 is outside the valid range of values [0, 1] for the enumeration type 'SystemEnum'}}
|
|
|
|
const SystemEnum x2 = static_cast<SystemEnum>(123); // ok, not a constant expression context
|
|
}
|
|
|
|
#define CONSTEXPR_CAST_TO_SYSTEM_ENUM_OUTSIDE_OF_RANGE \
|
|
constexpr SystemEnum system_enum = static_cast<SystemEnum>(123)
|