// P2169R4 - A nice placeholder with no name
// { dg-do compile { target c++11 } }
// { dg-options "" }

struct S {
  int _;
  int _;		// { dg-warning "name-independent declarations only available with" "" { target c++23_down } }
};
S s = { 1, 2 };

struct T {
  int _ = 3;
  int _ = 4;		// { dg-warning "name-independent declarations only available with" "" { target c++23_down } }
};
T t1;
#if __cplusplus >= 201402L
T t2 = { 5, 6 };
#endif

struct U {
  int _ (int) { return 1; }
  long _ (long) { return 2; }
  int _;		// { dg-warning "name-independent declarations only available with" "" { target c++23_down } }
};
U u = { 7 };

struct V {
  static int _;
  int _;		// { dg-warning "name-independent declarations only available with" "" { target c++23_down } }
};
V v = { 8 };

struct W : public S, T { int _; };
struct X : public S, T {
  int _;
  int _;		// { dg-warning "name-independent declarations only available with" "" { target c++23_down } }
};

struct Y {
  int _;
  int &foo () { return _; }
};

struct Z : public Y {
  int _;
  int bar ();
};

int
Z::bar ()
{
  return _ + Y::_;
}

struct A {
  int _;
  void foo () {
    int _;
    _ = 42;
    _ += ({ int _ = 0; _; });
  }
};

struct B {
  union { int _; };
  void foo () { ++_; };
};

struct C {
  int _;
  union { int x; };
  void foo () { ++_; };
};

struct D {
  struct { int _; };
  void foo () { ++_; };
};

struct E {
  struct _ {};
  int _;
  void foo () { ++_; int _; _ = 5; }
};
typedef struct E::_ E_;

struct F {
  struct _ {};
  int _;
  int _;		// { dg-warning "name-independent declarations only available with" "" { target c++23_down } }
};
typedef struct F::_ F_;