2018-11-07 Richard Biener <rguenther@suse.de>
[official-gcc.git] / gcc / testsuite / g++.dg / cpp1z / decomp32.C
bloba76d0c7ace81cf55d4cff41013336c3cbebe8f4c
1 // PR c++/83205
2 // { dg-do compile { target c++11 } }
3 // { dg-options "" }
5 struct A { int i; };
6 struct B { int i; };
7 namespace std {
8   template <typename T> struct tuple_size;
9   template <> struct tuple_size<A> {
10     static constexpr int value = -1;
11   };
12 #ifdef __SIZEOF_INT128__
13   template <> struct tuple_size<B> {
14     static constexpr unsigned __int128 value = -1;
15   };
16 #endif
19 auto [a] = A{}; // { dg-error "1 name provided" }
20                 // { dg-message "while 'A' decomposes into -1 elements" "" { target *-*-* } .-1 }
21                 // { dg-warning "structured bindings only available with" "" { target c++14_down } .-2 }
22 #ifdef __SIZEOF_INT128__
23 auto [b] = B{}; // { dg-error "1 name provided" "" { target int128 } }
24                 // { dg-message "while 'B' decomposes into \[0-9xa-fXA-F]* elements" "" { target int128 } .-1 }
25                 // { dg-warning "structured bindings only available with" "" { target { c++14_down && int128 } } .-2 }
26 auto [c, d] = B{};      // { dg-error "2 names provided" "" { target int128 } }
27                         // { dg-message "while 'B' decomposes into \[0-9xa-fXA-F]* elements" "" { target int128 } .-1 }
28                         // { dg-warning "structured bindings only available with" "" { target { c++14_down && int128 } } .-2 }
29 #endif
30 auto [e, f, g] = A{};   // { dg-error "3 names provided" }
31                         // { dg-message "while 'A' decomposes into -1 elements" "" { target *-*-* } .-1 }
32                         // { dg-warning "structured bindings only available with" "" { target c++14_down } .-2 }