view gcc/testsuite/g++.dg/expr/bitfield13.C @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents
children
line wrap: on
line source

// 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"
}