1 // { dg-do compile }
2 // { dg-options "-std=c++17" }
3
4 struct A { bool a, b; };
5 struct B { int a, b; };
6
7 void
foo()8 foo ()
9 {
10 auto [ a, b ] = A ();
11 for (; auto [ a, b ] = A (); ) // { dg-error "expected" }
12 ;
13 for (; false; auto [ a, b ] = A ()) // { dg-error "expected" }
14 ;
15 if (auto [ a, b ] = A ()) // { dg-error "expected" }
16 ;
17 if (auto [ a, b ] = A (); auto [ c, d ] = A ()) // { dg-error "expected" }
18 ;
19 if (int d = 5; auto [ a, b ] = A ()) // { dg-error "expected" }
20 ;
21 switch (auto [ a, b ] = B ()) // { dg-error "expected" }
22 {
23 case 2:
24 break;
25 }
26 switch (int d = 5; auto [ a, b ] = B ()) // { dg-error "expected" }
27 {
28 case 2:
29 break;
30 }
31 A e = A ();
32 auto && [ c, d ] = e;
33 auto [ i, j ] = A (), [ k, l ] = A (); // { dg-error "expected" }
34 auto m = A (), [ n, o ] = A (); // { dg-error "expected" }
35 }
36
37 template <typename T>
38 auto [ a, b ] = A (); // { dg-error "expected" }
39
40 struct C
41 {
42 auto [ e, f ] = A (); // { dg-error "expected" }
43 mutable auto [ g, h ] = A (); // { dg-error "expected" }
44 virtual auto [ i, j ] = A (); // { dg-error "expected" }
45 explicit auto [ k, l ] = A (); // { dg-error "expected" }
46 friend auto [ m, n ] = A (); // { dg-error "expected" }
47 };
48