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

            Bug ID: 119038
           Summary: Internal compiler error calling method with explicit
                    this parameter from generic lambda with implicitly
                    captured this
           Product: gcc
           Version: 14.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: rmccampbell7 at gmail dot com
  Target Milestone: ---

Created attachment 60597
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=60597&action=edit
GCC crash report from -freport-bug

Version/system: g++-14 (Ubuntu 14.2.0-4ubuntu2~24.04) 14.2.0

Minimal reproducing example, compiled with `g++-14 -std=c++23 temp.cpp -o
temp`:

```
class Foo {
  public:
    Foo() {
        [&]<typename T>(T x) {
            bar<T>();
        }(1);
    }

    template <typename T>
    void bar(this Foo& self) {}
};

int main() {
    Foo foo;
}
```

G++ crashes with "internal compiler error: trying to capture ‘this’ in
instantiation of generic lambda". The full crash report from -freport-bug is
attached.

It seems that any of: making the `this` capture explicit (i.e. `[this]{...}`),
qualifying bar as `this->bar<T>()`, moving the template parameter T out of the
lambda (i.e. to Foo or Foo()), removing the dependence on T from bar (i.e.
fixing it to `bar<int>`), or removing the explicit `this` parameter, all
prevent the crash.

Reply via email to