OK.
On Wed, Jan 25, 2017 at 4:07 PM, Jakub Jelinek <ja...@redhat.com> wrote: > Hi! > > As discussed in the PR, while lambda closure types are class types, it > is implementation dependent on what those class types actually contain, > allowing that to be decomposed is just weird. > > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? > > 2017-01-25 Jakub Jelinek <ja...@redhat.com> > > PR c++/78896 > * decl.c (cp_finish_decomp): Disallow memberwise decomposition of > lambda expressions. > > * g++.dg/cpp1z/decomp24.C: New test. > > --- gcc/cp/decl.c.jj 2017-01-25 17:17:51.000000000 +0100 > +++ gcc/cp/decl.c 2017-01-25 19:16:19.439879509 +0100 > @@ -7562,6 +7562,11 @@ cp_finish_decomp (tree decl, tree first, > error_at (loc, "cannot decompose non-array non-class type %qT", type); > goto error_out; > } > + else if (LAMBDA_TYPE_P (type)) > + { > + error_at (loc, "cannot decompose lambda closure type %qT", type); > + goto error_out; > + } > else > { > tree btype = find_decomp_class_base (loc, type, NULL_TREE); > --- gcc/testsuite/g++.dg/cpp1z/decomp24.C.jj 2017-01-25 19:19:42.536296515 > +0100 > +++ gcc/testsuite/g++.dg/cpp1z/decomp24.C 2017-01-25 19:19:20.000000000 > +0100 > @@ -0,0 +1,11 @@ > +// PR c++/78896 > +// { dg-do compile { target c++11 } } > +// { dg-options "" } > + > +int > +foo () > +{ > + int a {10}; > + auto [b] { [&a](){} }; // { dg-error "cannot decompose lambda > closure type" } > + return b - a; // { dg-warning "decomposition > declaration only available with" "" { target c++14_down } .-1 } > +} > > Jakub