teak-llvm/clang/test/SemaCXX/enum-bitfield.cpp
Richard Smith ac8c17533f A conversion from a scoped enumeration bitfield to an integral type is an
integral promotion only if it converts to the underlying type or its promoted
type, not if it converts to the promoted type that the bitfield would have it
if were of the underlying type.

llvm-svn: 233457
2015-03-28 00:31:40 +00:00

39 lines
784 B
C++

// RUN: %clang_cc1 -fsyntax-only -pedantic -std=c++11 -verify -triple x86_64-apple-darwin %s
enum E {};
struct Z {};
typedef int Integer;
struct X {
enum E : 1;
enum E : Z; // expected-error{{invalid underlying type}}
enum E2 : int;
enum E3 : Integer;
};
struct Y {
enum E : int(2);
enum E : Z(); // expected-error{{integral constant expression must have integral or unscoped enumeration type, not 'Z'}}
};
namespace pr18587 {
struct A {
enum class B {
C
};
};
const int C = 4;
struct D {
A::B : C;
};
}
enum WithUnderlying : unsigned { wu_value };
struct WithUnderlyingBitfield {
WithUnderlying wu : 3;
} wu = { wu_value };
int want_unsigned(unsigned);
int want_unsigned(int) = delete;
int check_enum_bitfield_promotes_correctly = want_unsigned(wu.wu);