1// Basic uses of initializer lists 2// { dg-do run } 3// { dg-options "-std=c++0x" } 4 5#include <initializer_list> 6 7extern "C" void abort(); 8 9using namespace std; 10 11struct A { int i,j; A(int _i,int _j): i(_i), j(_j) {} }; 12struct B { A a; B(A _a): a(_a) {} }; 13struct C { B b; C(B _b): b(_b) {} }; 14 15struct D 16{ 17 int ia[3]; 18 D (initializer_list<int> l) 19 { 20 const int *p = l.begin(); 21 for (int i = 0; i < 3; ++i) 22 ia[i] = *p++; 23 } 24}; 25 26void f(C c) 27{ 28 if (c.b.a.i != 1) abort(); 29 if (c.b.a.j != 2) abort(); 30} 31void f(int); 32 33void g(D d) 34{ 35 if (d.ia[0] != 1 || d.ia[1] != 2 || d.ia[2] != 3) 36 abort(); 37} 38 39struct E 40{ 41 int i, j, k; 42}; 43 44void h(E e) 45{ 46 if (e.i != 1 || e.j != 2 || e.k != 3) 47 abort(); 48} 49 50void i(initializer_list<int> l) 51{ 52 const int *p = l.begin(); 53 if (*p++ != 1) abort(); 54 if (*p++ != 2) abort(); 55 if (*p++ != 3) abort(); 56 if (p != l.end()) abort(); 57} 58 59struct U { U(int, int) {} }; 60U ua[] = { { 3, 2 } }; 61 62int main() 63{ 64 g({1,2,3}); 65 66 h({1,2,3}); 67 68 f({{{1,2}}}); 69 f({{A{1,2}}}); 70 71 i({1,2,3}); 72} 73