blob: 3f57d5f0397cf21779d63e9a87fccf4028b85d20 [file] [log] [blame]
// PR c++/82165
// { dg-do compile { target c++11 } }
struct flags {
enum field { f0, f1, no_field };
field b0 : 4;
field b1 : 4;
field a0, a1;
};
constexpr bool operator!(flags::field f) {
return f == flags::no_field;
}
#define SA(X) static_assert ((X), #X)
int main() {
constexpr flags f { flags::f0, flags::f1, flags::f0, flags::f1 };
SA( flags::f0 == 0 ); // 0
SA( flags::f1 == 1 ); // 1
SA( flags::no_field == 2 ); // 2
SA( !flags::f0 == 0 ); // (!) 0
SA( !flags::f1 == 0 ); // (!) 0
SA( !flags::no_field == 1 ); // (!) 1
SA( f.a0 == 0 ); // 0
SA( f.a1 == 1 ); // 1
SA( !f.a0 == 0 ); // (!) 0
SA( !f.a1 == 0 ); // (!) 0
SA( f.b0 == 0 ); // 0
SA( f.b1 == 1 ); // 1
SA( !f.b0 == 0 ); // expected "(!) 0", but got "1"
SA( !f.b1 == 0 ); // expected "(!) 0", but got "0"
}