/cp
[official-gcc.git] / gcc / testsuite / g++.dg / cpp1z / decomp16.C
blobdad69b89c08fca0fe8c0ea02fb80e1c5a767df9e
1 // { dg-do compile }
2 // { dg-options "-std=c++17" }
4 struct A { bool a, b; };
5 struct B { int a, b; };
7 void
8 foo ()
10   auto [ a, b ] = A ();
11   for (; auto [ a, b ] = A (); )                        // { dg-error "expected|no match" }
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" }
37 template <typename T>
38 auto [ a, b ] = A ();                                   // { dg-error "expected" }
40 struct C
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" }