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.

Reply via email to