// Test for value-initialization via {}
// { dg-do run { target c++11 } }

void * operator new (__SIZE_TYPE__, void *p) { return p; }
void * operator new[] (__SIZE_TYPE__, void *p) { return p; }

// Empty base so A isn't an aggregate
struct B {};
struct A: B {
  int i;
};

struct C: A {
  C(): A{} {}
};

int f(A a) { return a.i; }

int main()
{
  A a{};
  C c;
  int space = 42;
  A* ap = new (&space) A{};
  int space1[1] = { 42 };
  A* a1p = new (space1) A[1]{};
  if (a.i != 0
      || c.i != 0
      || ap->i != 0
      || a1p[0].i != 0
      || A{}.i != 0
      || f({}) != 0)
    return 1;
}
