On 1/23/25 5:11 PM, Nathaniel Shead wrote:
On Thu, Jan 23, 2025 at 04:47:32PM -0500, Jason Merrill wrote:
On 1/6/25 7:24 AM, Nathaniel Shead wrote:
Happy to defer this till GCC16 if preferred.

-- >8 --

This fills in a hole left in r15-6378-g9016c5ac94c557 with regards to
detection of TU-local lambdas.  Now that LAMBDA_EXPR_EXTRA_SCOPE is
properly set for most lambdas we can use it to detect lambdas that are
TU-local.

Lambdas in concept definitions I believe should not be considered
TU-local, since they are always unevaluated and should never be emitted.

It seems to me that they are also TU-local under
https://eel.is/c++draft/basic#link-15.2 .  It might be feasible to change
that, but that is the status quo.

Right, sorry I wasn't clear; I agree that this is the status quo, I just
think that we should accept them;  otherwise, currently we would reject
exporting any concept with a lambda contained within it, which seems
needless hostile (and causes a number of tests to fail).

In particular, lambdas within concepts are actually made use of within
the standard library, e.g. optional:1683, so we would either need to
continue to allow this to work somehow (either via mangling scope or a
new flag on the lambda, because there's no other way I was able to find
of determining this), or rewrite the concept to not use a lambda.

   // _GLIBCXX_RESOLVE_LIB_DEFECTS
   // 3746. optional's spaceship with U with a type derived from optional
   // causes infinite constraint meta-recursion
   template<typename _Tp>
     concept __is_derived_from_optional = requires (const _Tp& __t) {
       []<typename _Up>(const optional<_Up>&){ }(__t);
     };

Agreed, I've sent mail to CWG proposing adding concept-definition to the list in basic.link/15.2. Thanks for the example.

Jason

Reply via email to