@@ -2440,42 +2440,51 @@ E2 testDefaultArgForParam(E2 e2Param = (E2)-1) { // ok, not a constant expressio
24402440void testValueInRangeOfEnumerationValues () {
24412441 constexpr E1 x1 = static_cast <E1 >(-8 );
24422442 constexpr E1 x2 = static_cast <E1 >(8 );
2443- // expected-error@-1 {{integer value 8 is outside the valid range of values [-8, 7] for this enumeration type}}
2443+ // expected-error@-1 {{integer value 8 is outside the valid range of values [-8, 7] for the enumeration type 'E1' }}
24442444 E1 x2b = static_cast <E1 >(8 ); // ok, not a constant expression context
24452445
24462446 constexpr E2 x3 = static_cast <E2 >(-8 );
2447- // expected-error@-1 {{integer value -8 is outside the valid range of values [0, 7] for this enumeration type}}
2447+ // expected-error@-1 {{integer value -8 is outside the valid range of values [0, 7] for the enumeration type 'E2' }}
24482448 constexpr E2 x4 = static_cast <E2 >(0 );
24492449 constexpr E2 x5 = static_cast <E2 >(8 );
2450- // expected-error@-1 {{integer value 8 is outside the valid range of values [0, 7] for this enumeration type}}
2450+ // expected-error@-1 {{integer value 8 is outside the valid range of values [0, 7] for the enumeration type 'E2' }}
24512451
24522452 constexpr E3 x6 = static_cast <E3 >(-2048 );
24532453 constexpr E3 x7 = static_cast <E3 >(-8 );
24542454 constexpr E3 x8 = static_cast <E3 >(0 );
24552455 constexpr E3 x9 = static_cast <E3 >(8 );
24562456 constexpr E3 x10 = static_cast <E3 >(2048 );
2457- // expected-error@-1 {{integer value 2048 is outside the valid range of values [-2048, 2047] for this enumeration type}}
2457+ // expected-error@-1 {{integer value 2048 is outside the valid range of values [-2048, 2047] for the enumeration type 'E3' }}
24582458
24592459 constexpr E4 x11 = static_cast <E4 >(0 );
24602460 constexpr E4 x12 = static_cast <E4 >(1 );
24612461 constexpr E4 x13 = static_cast <E4 >(2 );
2462- // expected-error@-1 {{integer value 2 is outside the valid range of values [0, 1] for this enumeration type}}
2462+ // expected-error@-1 {{integer value 2 is outside the valid range of values [0, 1] for the enumeration type 'E4' }}
24632463
24642464 constexpr EEmpty x14 = static_cast <EEmpty>(0 );
24652465 constexpr EEmpty x15 = static_cast <EEmpty>(1 );
24662466 constexpr EEmpty x16 = static_cast <EEmpty>(2 );
2467- // expected-error@-1 {{integer value 2 is outside the valid range of values [0, 1] for this enumeration type}}
2467+ // expected-error@-1 {{integer value 2 is outside the valid range of values [0, 1] for the enumeration type 'EEmpty' }}
24682468
24692469 constexpr EFixed x17 = static_cast <EFixed>(100 );
24702470 constexpr EScoped x18 = static_cast <EScoped>(100 );
24712471
24722472 constexpr EMaxInt x19 = static_cast <EMaxInt>(__INT_MAX__-1 );
24732473 constexpr EMaxInt x20 = static_cast <EMaxInt>((long )__INT_MAX__+1 );
2474- // expected-error@-1 {{integer value 2147483648 is outside the valid range of values [-2147483648, 2147483647] for this enumeration type}}
2474+ // expected-error@-1 {{integer value 2147483648 is outside the valid range of values [-2147483648, 2147483647] for the enumeration type 'EMaxInt' }}
24752475
24762476 const NumberType neg_one = (NumberType) ((NumberType) 0 - (NumberType) 1 ); // ok, not a constant expression context
24772477}
24782478
2479+ template <class T , unsigned size> struct Bitfield {
2480+ static constexpr T max = static_cast <T>((1 << size) - 1 ); // #enum
2481+ };
2482+
2483+ void testValueInRangeOfEnumerationValuesViaTemplate () {
2484+ Bitfield<E2 , 3 > good;
2485+ Bitfield<E2 , 4 > bad; // cxx11-error@#enum {{integer value 15 is outside the valid range of values [0, 7] for the enumeration type 'E2'}}
2486+ }
2487+
24792488enum SortOrder {
24802489 AscendingOrder,
24812490 DescendingOrder
@@ -2494,4 +2503,4 @@ void A::f(SortOrder order) {
24942503GH50055::E2 GlobalInitNotCE1 = (GH50055::E2 )-1 ; // ok, not a constant expression context
24952504GH50055::E2 GlobalInitNotCE2 = GH50055::testDefaultArgForParam(); // ok, not a constant expression context
24962505constexpr GH50055::E2 GlobalInitCE = (GH50055::E2 )-1 ;
2497- // expected-error@-1 {{integer value -1 is outside the valid range of values [0, 7] for this enumeration type}}
2506+ // expected-error@-1 {{integer value -1 is outside the valid range of values [0, 7] for the enumeration type 'E2' }}
0 commit comments