https://gcc.gnu.org/g:6e10db3be0193514d8a67d1367d8fbe639e03b6a

commit r14-11823-g6e10db3be0193514d8a67d1367d8fbe639e03b6a
Author: Jason Merrill <ja...@redhat.com>
Date:   Fri May 30 18:27:45 2025 -0400

    c++: lambda this capture and requires [PR120123]
    
    We shouldn't need to be within the lambda body to look through it to the
    enclosing non-static member function.
    
    This change is a small subset of r16-970.
    
            PR c++/120123
    
    gcc/cp/ChangeLog:
    
            * lambda.cc (nonlambda_method_basetype): Look through lambdas
            even when current_class_ref is null.
    
    gcc/testsuite/ChangeLog:
    
            * g++.dg/cpp2a/concepts-lambda24.C: New test.

Diff:
---
 gcc/cp/lambda.cc                               |  5 +----
 gcc/testsuite/g++.dg/cpp2a/concepts-lambda24.C | 13 +++++++++++++
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/gcc/cp/lambda.cc b/gcc/cp/lambda.cc
index 5c97f0f6fd33..dfaf79692cd1 100644
--- a/gcc/cp/lambda.cc
+++ b/gcc/cp/lambda.cc
@@ -1002,12 +1002,9 @@ current_nonlambda_function (void)
 tree
 nonlambda_method_basetype (void)
 {
-  if (!current_class_ref)
-    return NULL_TREE;
-
   tree type = current_class_type;
   if (!type || !LAMBDA_TYPE_P (type))
-    return type;
+    return current_class_ref ? type : NULL_TREE;
 
   while (true)
     {
diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-lambda24.C 
b/gcc/testsuite/g++.dg/cpp2a/concepts-lambda24.C
new file mode 100644
index 000000000000..28f56ca2335e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/concepts-lambda24.C
@@ -0,0 +1,13 @@
+// PR c++/120123
+// { dg-do compile { target c++20 } }
+
+struct H {
+    void member(int) {}
+    void call() {
+        [this]() {
+            [this](const auto& v)
+                requires requires { /*this->*/member(v); }
+            { return member(v); }(0);
+        };
+    }
+};

Reply via email to