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

            Bug ID: 116897
           Summary: lambda with deduced this parameter does not capture
                    this properly
           Product: gcc
           Version: 14.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: djnz00 at gmail dot com
  Target Milestone: ---

Created attachment 59225
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=59225&action=edit
minimized source code

A lambda with a deduced this parameter does not correctly capture this from the
containing scope.

clang compiles this code correctly; gcc incorrectly reports an invalid use of a
non-static data member A::i, despite A *this having been captured.

struct A {
  int   i = 42;
  int foo() {
    return [this](this auto &&self) { auto p = &i; return *p; }();
  }
};

] clang++ -std=gnu++23 zc9.cc -o zc9
] g++ -std=gnu++23 zc9.cc -o zc9
zc9.cc: In lambda function:
zc9.cc:4:49: error: invalid use of non-static data member ‘A::i’
    4 |     return [this](this auto &&self) { auto p = &i; return *p; }();
      |                                                 ^
zc9.cc:2:9: note: declared here
    2 |   int   i = 42;
      |         ^
zc9.cc: In member function ‘int A::foo()’:
zc9.cc:4:64: error: void value not ignored as it ought to be
    4 |     return [this](this auto &&self) { auto p = &i; return *p; }();
      |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~

Reply via email to