[Bug c++/85889] New: lambda expression can capture structured bindings

redi at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed May 23 14:07:00 GMT 2018


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85889

            Bug ID: 85889
           Summary: lambda expression can capture structured bindings
           Product: gcc
           Version: 8.1.1
            Status: UNCONFIRMED
          Keywords: accepts-invalid
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: redi at gcc dot gnu.org
  Target Milestone: ---

[expr.prim.lambda.capture] p8 says "If a lambda-expression explicitly captures
an entity that is not odr-usable or captures a structured binding (explicitly
or implicitly), the program is ill-formed."

With -std=c++17 this compiles without any diagnostic:

struct X { int i, j; };
void f() {
  X x{};
  auto [i, j] = x;
  [&i]() { };
}


Clang says:

l.cc:5:5: error: 'i' in capture list does not name a variable
  [&i]() { };
    ^
l.cc:5:3: warning: expression result unused [-Wunused-value]
  [&i]() { };
  ^~~~~~~~~~
1 warning and 1 error generated.


And EDG says:

"l.cc", line 5: error: structured binding cannot be captured
    [&i]() { };
      ^

"l.cc", line 4: warning: variable "i" was declared but never referenced
    auto [i, j] = x;
          ^

"l.cc", line 4: warning: variable "j" was declared but never referenced
    auto [i, j] = x;
             ^

1 error detected in the compilation of "l.cc".


More information about the Gcc-bugs mailing list