https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117963

            Bug ID: 117963
           Summary: Invalid enum values accepted in constexpr with
                    -fstrict-enums
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Keywords: accepts-invalid
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: redi at gcc dot gnu.org
  Target Milestone: ---

enum E { E0, E1, E2 };

constexpr E f() { return static_cast<E>(44); }

constexpr E e = f();


GCC accepts this even with -fstrict-enums

Clang correctly diagnoses it (but incorrectly does so twice?):

enum.cc:3:26: error: integer value 44 is outside the valid range of values [0,
3] for the enumeration type 'E' [-Wenum-constexpr-conversion]
    3 | constexpr E f() { return static_cast<E>(44); }
      |                          ^
enum.cc:3:26: error: integer value 44 is outside the valid range of values [0,
3] for the enumeration type 'E' [-Wenum-constexpr-conversion]
2 errors generated.


Clang treat it like a pedwarn. It can be disabled with
-Wno-enum-constexpr-conversion or downgraded to a warning with
-Wno-error=enum-constexpr-conversion (they are trying to make the constexpr
cases an unconditional error but are getting pushback from users).

Reply via email to