1 // PR c++/80370 2 // { dg-do compile { target c++14 } } 3 // { dg-options "" } 4 5 namespace std { 6 template <typename> struct tuple_size; 7 template <long, typename> struct tuple_element; 8 template <typename...> struct tuple {}; 9 template <typename... T> struct tuple_size<tuple<T...>> { static constexpr int value = 1; }; 10 template <typename T, typename... U> struct tuple_element<0, tuple<T, U...>> { typedef T type; }; 11 template <int, typename... T> int& get (tuple<T...>); 12 } 13 14 template <int N> 15 void 16 foo (std::tuple<int> b) 17 { 18 auto [c] = b; // { dg-warning "structured bindings only available with" "" { target c++14_down } } 19 } 20 21 template <typename T> 22 void 23 bar (std::tuple<T> b) 24 { 25 auto [c] = b; // { dg-warning "structured bindings only available with" "" { target c++14_down } } 26 } 27 28 void 29 baz (std::tuple<int> b) 30 { 31 foo <5> (b); 32 bar (b); 33 } 34 35 int 36 main () 37 { 38 [](auto) { [](std::tuple<int> b) { auto[c] = b; }; } (0); // { dg-warning "structured bindings only available with" "" { target c++14_down } } 39 } 40