// Basic uses of initializer lists
// { dg-do run { target c++11 } }

#include <initializer_list>

extern "C" void abort();

using namespace std;

struct A { int i,j; A(int _i,int _j): i(_i), j(_j) {} };
struct B { A a; B(A _a): a(_a) {} };
struct C { B b; C(B _b): b(_b) {} };

struct D
{
  int ia[3];
  D (initializer_list<int> l)
  {
    const int *p = l.begin();
    for (int i = 0; i < 3; ++i)
      ia[i] = *p++;
  }
};

void f(C c)
{
  if (c.b.a.i != 1) abort();
  if (c.b.a.j != 2) abort();
}
void f(int);

void g(D d)
{
  if (d.ia[0] != 1 || d.ia[1] != 2 || d.ia[2] != 3)
    abort();
}

struct E
{
  int i, j, k;
};

void h(E e)
{
  if (e.i != 1 || e.j != 2 || e.k != 3)
    abort();
}

void i(initializer_list<int> l)
{
  const int *p = l.begin();
  if (*p++ != 1) abort();
  if (*p++ != 2) abort();
  if (*p++ != 3) abort();
  if (p != l.end()) abort();
}

struct U { U(int, int) {} };
U ua[] = { { 3, 2 } };

int main()
{
  g({1,2,3});

  h({1,2,3});

  f({{{1,2}}});
  f({{A{1,2}}});

  i({1,2,3});
}
