// PR c++/97566
// { dg-do compile { target c++14 } }
// error disappears if E doesn't inherit from B
struct B {};
struct E : B {};
struct counter {
  constexpr void inc() { size++; }
  // error disappears if you remove or reorder this value
  int unused = 0;
  int size = 0;
  [[no_unique_address]] E empty = {};
};
#define SA(X) static_assert((X),#X)
constexpr int test1() {
  counter x;
  x.inc();
  return x.size;
}
SA(test1() == 1);
constexpr int test2() {
  counter x = { 0, 1, {} };
  x.inc();
  return x.size;
}
SA(test2() == 2);
counter y;
struct counter2 {
  constexpr counter2() { inc(); }
  constexpr void inc() { size++; }
  // error disappears if you remove or reorder this value
  int unused = 0;
  int size = 0;
  [[no_unique_address]] E empty = {};
};
constexpr int test3() {
  counter2 x;
  x.inc();
  return x.size;
}
SA(test3() == 2);