2018-11-07 Richard Biener <rguenther@suse.de>
[official-gcc.git] / gcc / testsuite / g++.dg / cpp2a / range-for16.C
blobcbfd987338756e3584db6a2a7f80ac33284ffc49
1 // PR c++/87152
2 // { dg-do run }
3 // { dg-options "-std=c++2a" }
5 struct A { int i, j; };
7 template<typename T>
8 void foo ()
10   A a = { .i = 2, .j = 3 };
11   T arr[] = { 1, 1, 1 };
13   for (auto & [ x, y ] = a; auto z : arr)
14     if (x + z != 3 || y + z != 4)
15       __builtin_abort ();
17   for (T d = 1; auto &z : arr)
18     z += d;
20   for (const auto [ x, y ] = a; auto z : arr)
21     if (x + z != 4 || y + z != 5)
22       __builtin_abort ();
24   for (T d = 1; auto &z : arr)
25     z += d;
27   for (auto [ x, y ] = a; auto z : arr)
28     if (x + z != 5 || y + z != 6)
29       __builtin_abort ();
32 int
33 main ()
35   foo<int>();