// RUN: %clang_cc1 -fexperimental-new-constant-interpreter -verify %s // RUN: %clang_cc1 -verify=ref %s enum class EC : short { A, B, C }; static_assert(static_cast(EC::A) == 0, ""); static_assert(static_cast(EC::B) == 1, ""); static_assert(static_cast(EC::C) == 2, ""); static_assert(sizeof(EC) == sizeof(short), ""); constexpr EC ec = EC::C; static_assert(static_cast(ec) == 2, ""); constexpr int N = 12; constexpr int M = 2; enum CE { ONE = -1, TWO = 2, THREE, FOUR = 4, FIVE = N + M, SIX = FIVE + 2, MAX = __INT_MAX__ * 2U + 1U }; static_assert(ONE == -1, ""); static_assert(THREE == 3, ""); static_assert(FIVE == 14, ""); static_assert(SIX == 16, ""); constexpr EC testEnums() { EC e = EC::C; e = EC::B; EC::B = e; // expected-error{{expression is not assignable}} \ // ref-error{{expression is not assignable}} return e; } constexpr EC getB() { EC e = EC::C; e = EC::B; return e; } static_assert(getB() == EC::B, "");