https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118667
Bug ID: 118667 Summary: lambda references to bit-fields via structure binding is invalid Product: gcc Version: 15.0 Status: UNCONFIRMED Keywords: accepts-invalid, c++-lambda Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: pinskia at gcc dot gnu.org Target Milestone: --- Forwarded from https://github.com/llvm/llvm-project/issues/124444 since GCC also accepts it. Take: ``` void test1() { struct S { int a : 4; }; const auto [x] = S{}; [&x] {}(); // #1 [&] { (void)x; }(); // #2 } void test2() { struct S { const int a : 4; }; auto [x] = S{}; [&x] {}(); // #3 [&] { (void)x; }(); // #4 } ``` All 4 lines marked with #1 should be rejected as invalid as you cannot do a lambda reference to a bitfield. According to [expr.prim.lambda.capture]/12, all of these 4 cases should be ill-formed: ... A bit-field or a member of an anonymous union shall not be captured by reference. You can see examples in P1381R1 (https://wg21.link/P1381R1#what-can-we-do) showing that capturing structured bindings refering bit-fields "means" capturing the bit-fields.