blob: a9b23b08d83afc229689ffa135aa2a0a32630de7 [file] [log] [blame]
// { dg-do compile { target c++11 } }
// { dg-options "" }
struct A { int a, b; float c; };
A &bar ();
struct B { int d; };
B baz ();
void
test (A &b, B c)
{
int && [ d ] = c; // { dg-error "structured binding declaration cannot have type 'int'" }
// { dg-warning "structured bindings only available with '-std=c..17' or '-std=gnu..17'" "" { target c++14_down } .-1 }
char & [ e, f, ff ] { b }; // { dg-error "structured binding declaration cannot have type 'char'" }
// { dg-warning "structured bindings only available with '-std=c..17' or '-std=gnu..17'" "" { target c++14_down } .-1 }
auto&[g,h,i]=b; // { dg-warning "structured bindings only available with '-std=c..17' or '-std=gnu..17'" "" { target c++14_down } }
decltype (auto) [ j ] = c; // { dg-error "structured binding declaration cannot have type 'decltype.auto.'" "" { target c++14 } }
// { dg-warning "structured bindings only available with '-std=c..17' or '-std=gnu..17'" "" { target c++14_down } .-1 }
// { dg-error "expected primary-expression before 'decltype'" "" { target c++11_down } .-2 }
auto & & && & [ m, n, o ] = b; // { dg-error "multiple ref-qualifiers" }
// { dg-warning "structured bindings only available with '-std=c..17' or '-std=gnu..17'" "" { target c++14_down } .-1 }
constexpr auto [ p ] = c; // { dg-error "structured binding declaration cannot be 'constexpr'" }
// { dg-warning "structured bindings only available with '-std=c..17' or '-std=gnu..17'" "" { target c++14_down } .-1 }
friend auto [ q ] = c; // { dg-error "'friend' used outside of class" }
// { dg-warning "structured bindings only available with '-std=c..17' or '-std=gnu..17'" "" { target c++14_down } .-1 }
typedef auto [ r ] = c; // { dg-error "structured binding declaration cannot be 'typedef'" }
// { dg-warning "structured bindings only available with '-std=c..17' or '-std=gnu..17'" "" { target c++14_down } .-1 }
inline auto [ s ] = c; // { dg-error "structured binding declaration cannot be 'inline'" }
// { dg-warning "structured bindings only available with '-std=c..17' or '-std=gnu..17'" "" { target c++14_down } .-1 }
__restrict auto [ t ] = c; // { dg-error "invalid use of 'restrict'" }
// { dg-warning "structured bindings only available with '-std=c..17' or '-std=gnu..17'" "" { target c++14_down } .-1 }
long long auto [ u ] = c; // { dg-error "'long long' specified with 'auto'" }
// { dg-warning "structured bindings only available with '-std=c..17' or '-std=gnu..17'" "" { target c++14_down } .-1 }
virtual auto [ v ] = c; // { dg-error "'virtual' outside class declaration" }
// { dg-warning "structured bindings only available with '-std=c..17' or '-std=gnu..17'" "" { target c++14_down } .-1 }
explicit auto [ w ] = c; // { dg-error "'explicit' outside class declaration" }
// { dg-warning "structured bindings only available with '-std=c..17' or '-std=gnu..17'" "" { target c++14_down } .-1 }
static auto [ x ] = c; // { dg-warning "structured binding declaration can be 'static' only in" "" { target c++17_down } }
// { dg-warning "structured bindings only available with '-std=c..17' or '-std=gnu..17'" "" { target c++14_down } .-1 }
extern auto [ y ] { c }; // { dg-error "structured binding declaration cannot be 'extern'" }
// { dg-warning "structured bindings only available with '-std=c..17' or '-std=gnu..17'" "" { target c++14_down } .-1 }
thread_local auto [ z ] = c; // { dg-warning "structured binding declaration can be 'thread_local' only in" "" { target c++17_down } }
// { dg-warning "structured bindings only available with '-std=c..17' or '-std=gnu..17'" "" { target c++14_down } .-1 }
}
__thread auto [ z2 ] = B (); // { dg-warning "structured binding declaration can be '__thread' only in" "" { target c++17_down } }
// { dg-warning "structured bindings only available with '-std=c..17' or '-std=gnu..17'" "" { target c++14_down } .-1 }
void
test2 (auto & [ p ] = bar ()) // { dg-error "'p' was not declared in this scope" }
{ // { dg-warning "auto" "" { target { ! concepts } } .-1 }
}
int arr[4];
void
test3 (A &b, B c)
{
auto [ d, e, f ] = arr; // { dg-error "only 3 names provided" }
// { dg-message "while 'int .4.' decomposes into 4 elements" "" { target *-*-* } .-1 }
// { dg-warning "structured bindings only available with '-std=c..17' or '-std=gnu..17'" "" { target c++14_down } .-2 }
auto & [ g, h, i, j, k ] = arr; // { dg-error "5 names provided" }
// { dg-message "while 'int .4.' decomposes into 4 elements" "" { target *-*-* } .-1 }
// { dg-warning "structured bindings only available with '-std=c..17' or '-std=gnu..17'" "" { target c++14_down } .-2 }
auto [ l, m ] = b; // { dg-error "only 2 names provided" }
// { dg-message "while 'A' decomposes into 3 elements" "" { target *-*-* } .-1 }
// { dg-warning "structured bindings only available with '-std=c..17' or '-std=gnu..17'" "" { target c++14_down } .-2 }
auto & [ n, o, p, q ] = b; // { dg-error "4 names provided" }
// { dg-message "while 'A' decomposes into 3 elements" "" { target *-*-* } .-1 }
// { dg-warning "structured bindings only available with '-std=c..17' or '-std=gnu..17'" "" { target c++14_down } .-2 }
auto [] { c }; // { dg-error "empty structured binding declaration" }
// { dg-warning "structured bindings only available with '-std=c..17' or '-std=gnu..17'" "" { target c++14_down } .-1 }
auto [ r, s ] = c; // { dg-error "2 names provided" }
// { dg-message "while 'B' decomposes into 1 element" "" { target *-*-* } .-1 }
// { dg-warning "structured bindings only available with '-std=c..17' or '-std=gnu..17'" "" { target c++14_down } .-2 }
}