| // { dg-do run { target c++11 } } |
| // { dg-options "" } |
| |
| int ccnt, dcnt, cccnt, tccnt; |
| |
| struct A |
| { |
| A () : a (6) { ccnt++; } |
| ~A () { dcnt++; } |
| explicit A (const A &x) : a (x.a) { cccnt++; } |
| template <typename T> |
| A (const T &x) : a (x.a) { tccnt++; } |
| int a; |
| }; |
| |
| int |
| main () |
| { |
| if (ccnt || dcnt || cccnt || tccnt) |
| __builtin_abort (); |
| { |
| A a[6]; |
| if (ccnt != 6 || dcnt || cccnt || tccnt) |
| __builtin_abort (); |
| { |
| auto [b,c,d,e,f,g] = a; // { dg-warning "structured bindings only available with" "" { target c++14_down } } |
| if (ccnt != 6 || dcnt || cccnt || tccnt != 6) |
| __builtin_abort (); |
| b.a++; |
| c.a += 2; |
| f.a += 3; |
| if (b.a != 7 || c.a != 8 || d.a != 6 || e.a != 6 || f.a != 9 || g.a != 6) |
| __builtin_abort (); |
| if (&b == &a[0] || &c == &a[1] || &d == &a[2] || &e == &a[3] || &f == &a[4] || &g == &a[5]) |
| __builtin_abort (); |
| { |
| auto&[ h, i, j, k, l, m ] = a; // { dg-warning "structured bindings only available with" "" { target c++14_down } } |
| if (ccnt != 6 || dcnt || cccnt || tccnt != 6) |
| __builtin_abort (); |
| j.a += 4; |
| k.a += 5; |
| m.a += 6; |
| if (a[0].a != 6 || a[1].a != 6 || a[2].a != 10 || a[3].a != 11 || a[4].a != 6 || a[5].a != 12) |
| __builtin_abort (); |
| if (&h != &a[0] || &i != &a[1] || &j != &a[2] || &k != &a[3] || &l != &a[4] || &m != &a[5]) |
| __builtin_abort (); |
| } |
| if (ccnt != 6 || dcnt || cccnt || tccnt != 6) |
| __builtin_abort (); |
| } |
| if (ccnt != 6 || dcnt != 6 || cccnt || tccnt != 6) |
| __builtin_abort (); |
| } |
| if (ccnt != 6 || dcnt != 12 || cccnt || tccnt != 6) |
| __builtin_abort (); |
| |
| { |
| A a[6]; |
| if (ccnt != 12 || dcnt != 12 || cccnt || tccnt != 6) |
| __builtin_abort (); |
| { |
| auto [b,c,d,e,f,g] { a }; // { dg-warning "structured bindings only available with" "" { target c++14_down } } |
| if (ccnt != 12 || dcnt != 12 || cccnt != 6 || tccnt != 6) |
| __builtin_abort (); |
| b.a++; |
| c.a += 2; |
| f.a += 3; |
| if (b.a != 7 || c.a != 8 || d.a != 6 || e.a != 6 || f.a != 9 || g.a != 6) |
| __builtin_abort (); |
| if (&b == &a[0] || &c == &a[1] || &d == &a[2] || &e == &a[3] || &f == &a[4] || &g == &a[5]) |
| __builtin_abort (); |
| { |
| auto&[ h, i, j, k, l, m ] {a}; // { dg-warning "structured bindings only available with" "" { target c++14_down } } |
| if (ccnt != 12 || dcnt != 12 || cccnt != 6 || tccnt != 6) |
| __builtin_abort (); |
| j.a += 4; |
| k.a += 5; |
| m.a += 6; |
| if (a[0].a != 6 || a[1].a != 6 || a[2].a != 10 || a[3].a != 11 || a[4].a != 6 || a[5].a != 12) |
| __builtin_abort (); |
| if (&h != &a[0] || &i != &a[1] || &j != &a[2] || &k != &a[3] || &l != &a[4] || &m != &a[5]) |
| __builtin_abort (); |
| } |
| if (ccnt != 12 || dcnt != 12 || cccnt != 6 || tccnt != 6) |
| __builtin_abort (); |
| } |
| if (ccnt != 12 || dcnt != 18 || cccnt != 6 || tccnt != 6) |
| __builtin_abort (); |
| } |
| if (ccnt != 12 || dcnt != 24 || cccnt != 6 || tccnt != 6) |
| __builtin_abort (); |
| |
| { |
| A a[6]; |
| if (ccnt != 18 || dcnt != 24 || cccnt != 6 || tccnt != 6) |
| __builtin_abort (); |
| { |
| auto [b,c,d,e,f,g] ( a ); // { dg-warning "structured bindings only available with" "" { target c++14_down } } |
| if (ccnt != 18 || dcnt != 24 || cccnt != 12 || tccnt != 6) |
| __builtin_abort (); |
| b.a++; |
| c.a += 2; |
| f.a += 3; |
| if (b.a != 7 || c.a != 8 || d.a != 6 || e.a != 6 || f.a != 9 || g.a != 6) |
| __builtin_abort (); |
| if (&b == &a[0] || &c == &a[1] || &d == &a[2] || &e == &a[3] || &f == &a[4] || &g == &a[5]) |
| __builtin_abort (); |
| { |
| auto&[ h, i, j, k, l, m ] (a); // { dg-warning "structured bindings only available with" "" { target c++14_down } } |
| if (ccnt != 18 || dcnt != 24 || cccnt != 12 || tccnt != 6) |
| __builtin_abort (); |
| j.a += 4; |
| k.a += 5; |
| m.a += 6; |
| if (a[0].a != 6 || a[1].a != 6 || a[2].a != 10 || a[3].a != 11 || a[4].a != 6 || a[5].a != 12) |
| __builtin_abort (); |
| if (&h != &a[0] || &i != &a[1] || &j != &a[2] || &k != &a[3] || &l != &a[4] || &m != &a[5]) |
| __builtin_abort (); |
| } |
| if (ccnt != 18 || dcnt != 24 || cccnt != 12 || tccnt != 6) |
| __builtin_abort (); |
| } |
| if (ccnt != 18 || dcnt != 30 || cccnt != 12 || tccnt != 6) |
| __builtin_abort (); |
| } |
| if (ccnt != 18 || dcnt != 36 || cccnt != 12 || tccnt != 6) |
| __builtin_abort (); |
| } |