Closed
Description
struct Pair { int a;};
Pair Foo ();
auto Bar ()
{
auto [b] = Foo (); // b must be a structured binding
return [&] <typename T> (T) { return b; } (1); // lambda must be a template
}
AFAICT that's well formed. GCC accepts.
$ ~/llvm/trunk/build/bin/clang++ -std=c++20 -c binding.cc
binding.cc:8:40: error: reference to local binding 'b' declared in enclosing function 'Bar'
return [&] <typename T> (T) { return b; } (1);
^
binding.cc:8:45: note: in instantiation of function template specialization 'Bar()::(anonymous class)::operator()<int>' requested here
return [&] <typename T> (T) { return b; } (1);
^
binding.cc:6:9: note: 'b' declared here
auto [b] = Foo ();
^
1 error generated.