Requires clauses in pfn conversions for generic lambdas
Waffl3x
waffl3x@protonmail.com
Sat Sep 12 14:46:49 GMT 2026
On Friday, September 11th, 2026 at 6:51 PM, Ivan Sokolov via Gcc <gcc@gcc.gnu.org> wrote:
> On Sat, 12 Sep 00:01:00 GMT 2026,
> "Ivan Sokolov" <sugrob9000aero@gmail.com> wrote:
>
> > The standard [expr.prim.lambda.closure#12] seems silent on the matter,
> > and the above examples make me think this paragraph was simply
> > forgotten when wording was modified to account for constraints.
>
> On a second look, it seems Clang and GCC both do another useful
> deviation from that the standard.
>
> The paragraph says that the return value of the conversion operator
> should be as if decltype(/*operator() call*/). However, when a trailing
> return type is present, as it is in my example, we are able to bypass
> the decltype() and use the trailing return type as it is spelled, which
> allows us to deduce the template parameter on the conversion even
> though it is not deducible on the call operator.
>
> int(*pfn)() = []<typename T>()->T { return T{}; };
> // clang and gcc both accept this, in spite of the standard
>
> So perhaps that one paragraph is in need of a bigger overhaul :)
>
Yes I think you should open a CWG issue. And at minimum open a PR for
the ICE in your first message. (Please do check if it is a duplicate
first, I haven't done so yet.)
Thanks,
Alex.
More information about the Gcc
mailing list