| // { dg-do compile { target c++11 } } |
| // { dg-options "" } |
| |
| struct A { int i; long j; int k : 2; char l; } a; |
| int c[2]; |
| struct B { template<int I> int &get () { return c[I]; } } b; |
| namespace std { |
| template<typename T> struct tuple_size; |
| template<int, typename> struct tuple_element; |
| } |
| template<> struct std::tuple_size<B> { static constexpr int value = 2; }; |
| template<int I> struct std::tuple_element<I,B> { typedef int type; }; |
| |
| auto [ aa, bb, cc, dd ] = a; // { dg-warning "structured bindings only available with" "" { target c++14_down } } |
| // { dg-final { scan-assembler "_ZDC2aa2bb2cc2ddE" } } |
| const auto & [ e, f, g, h ] = a; // { dg-warning "structured bindings only available with" "" { target c++14_down } } |
| // { dg-final { scan-assembler "_ZDC1e1f1g1hE" } } |
| auto [ ee, ff ] = b; // { dg-warning "structured bindings only available with" "" { target c++14_down } } |
| // { dg-final { scan-assembler "_ZDC2ee2ffE" } } |
| auto & [ gg, hh ] = b; // { dg-warning "structured bindings only available with" "" { target c++14_down } } |
| // { dg-final { scan-assembler "_ZDC2gg2hhE" } } |
| namespace N |
| { |
| namespace M |
| { |
| auto [ i, j, k, l ] = a; // { dg-warning "structured bindings only available with" "" { target c++14_down } } |
| // { dg-final { scan-assembler "_ZN1N1MDC1i1j1k1lEE" } } |
| auto & [ m, n, o, ppp ] = a; // { dg-warning "structured bindings only available with" "" { target c++14_down } } |
| // { dg-final { scan-assembler "_ZN1N1MDC1m1n1o3pppEE" } } |
| auto [ ii, jj ] = b; // { dg-warning "structured bindings only available with" "" { target c++14_down } } |
| // { dg-final { scan-assembler "_ZN1N1MDC2ii2jjEE" } } |
| // { dg-final { scan-assembler "_ZN1N1M2iiE" } } |
| // { dg-final { scan-assembler "_ZN1N1M2jjE" } } |
| auto & [ mm, nn ] = b; // { dg-warning "structured bindings only available with" "" { target c++14_down } } |
| // { dg-final { scan-assembler "_ZN1N1MDC2mm2nnEE" } } |
| // { dg-final { scan-assembler "_ZN1N1M2mmE" } } |
| // { dg-final { scan-assembler "_ZN1N1M2nnE" } } |
| } |
| } |
| namespace std |
| { |
| auto [ i2, j2, k2, l2 ] = a; // { dg-warning "structured bindings only available with" "" { target c++14_down } } |
| // { dg-final { scan-assembler "_ZStDC2i22j22k22l2E" } } |
| auto [ vv, ww ] = b; // { dg-warning "structured bindings only available with" "" { target c++14_down } } |
| // { dg-final { scan-assembler "_ZStDC2vv2wwE" } } |
| // { dg-final { scan-assembler "_ZSt2vv" } } |
| // { dg-final { scan-assembler "_ZSt2ww" } } |
| } |
| namespace |
| { |
| auto [ v, w, x, y ] = a; // { dg-warning "structured bindings only available with" "" { target c++14_down } } |
| } |