| 1 | // RUN: %clang_cc1 -fsyntax-only -pedantic -std=c++11 -verify -triple x86_64-apple-darwin %s |
| 2 | |
| 3 | enum E {}; |
| 4 | |
| 5 | struct Z {}; |
| 6 | typedef int Integer; |
| 7 | |
| 8 | struct X { |
| 9 | enum E : 1; |
| 10 | enum E : Z; // expected-error{{invalid underlying type}} |
| 11 | enum E2 : int; |
| 12 | enum E3 : Integer; |
| 13 | }; |
| 14 | |
| 15 | struct Y { |
| 16 | enum E : int(2); |
| 17 | enum E : Z(); // expected-error{{integral constant expression must have integral or unscoped enumeration type, not 'Z'}} |
| 18 | }; |
| 19 | |
| 20 | namespace pr18587 { |
| 21 | struct A { |
| 22 | enum class B { |
| 23 | C |
| 24 | }; |
| 25 | }; |
| 26 | const int C = 4; |
| 27 | struct D { |
| 28 | A::B : C; |
| 29 | }; |
| 30 | } |
| 31 | |
| 32 | enum WithUnderlying : unsigned { wu_value }; |
| 33 | struct WithUnderlyingBitfield { |
| 34 | WithUnderlying wu : 3; |
| 35 | } wu = { wu_value }; |
| 36 | int want_unsigned(unsigned); |
| 37 | int want_unsigned(int) = delete; |
| 38 | int check_enum_bitfield_promotes_correctly = want_unsigned(wu.wu); |
| 39 | |