https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102609
--- Comment #18 from waffl3x <waffl3x at protonmail dot com> --- (In reply to Gašper Ažman from comment #17) > Read through the patch quickly, want to suggest a few tests. > > When a lambda has captures, the explicit object parameter is used to get at > them *silently*, if they are related, otherwise the program is ill-formed: > > int x = 42; > auto f1 = [x](this auto&&) { > return x; > }; > auto f2 = [](this auto&&) { return 42; } > > static_cast<int(*)(decltype(f1)&)>(decltype(f1)::operator()); // OK > static_cast<int(*)(int&)>(decltype(f1)::operator()); // ERROR > static_cast<int(*)(int&)>(decltype(f2)::operator()); // OK Ah I see, thanks for the input. I was actually wondering about that, especially if you were expected to use the explicit object parameter to access captures. Is my understanding correct that the second case would not be an error if captures were not used in the body of the lambda? Based on your wording I would believe that is the case, so implementing this behavior would not be as simple as just disallowing unrelated deduced types when there are captures. Unfortunately, I will not have access to my computer for a while more, I plan on setting up an environment at another computer and fixing the formatting errors that were noted, but I will wait until I have access to my computer before I work on it more seriously I think. Thanks a lot for looking at the patch though, I really appreciate the time you've taken.