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 | |