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