https://gcc.gnu.org/g:3e1f749e2dbd3d397778af9c8f2ecb060ef1d934

commit r17-911-g3e1f749e2dbd3d397778af9c8f2ecb060ef1d934
Author: Marek Polacek <[email protected]>
Date:   Thu May 28 12:18:29 2026 -0400

    c++: add fixed test [PR106957]
    
    Fixed by r16-8015:
    c++: error routines re-entered with uneval lambda [PR124397]
    
            PR c++/106957
    
    gcc/testsuite/ChangeLog:
    
            * g++.dg/cpp2a/lambda-uneval32.C: New test.

Diff:
---
 gcc/testsuite/g++.dg/cpp2a/lambda-uneval32.C | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/gcc/testsuite/g++.dg/cpp2a/lambda-uneval32.C 
b/gcc/testsuite/g++.dg/cpp2a/lambda-uneval32.C
new file mode 100644
index 000000000000..63980896eb12
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/lambda-uneval32.C
@@ -0,0 +1,25 @@
+// PR c++/106957
+// { dg-do compile { target c++20 } }
+
+template<bool B>
+struct bool_constant {
+  static constexpr bool value = B;
+  constexpr operator bool() const { return value; }
+};
+
+using true_type = bool_constant<true>;
+using false_type = bool_constant<false>;
+
+constexpr auto f = [](int){}; // { dg-error "invalid conversion" }
+
+template<typename T>
+auto canCallFOn(T) -> decltype([]{ f(T{}); }(), true_type{}); // { dg-error 
"no match|invalid conversion" }
+
+constexpr false_type canCallFOn(...) {
+    return {};
+}
+
+int main() {
+    static_assert(!canCallFOn(1)); // { dg-error "" }
+    static_assert(!canCallFOn("")); // { dg-error "" }
+}

Reply via email to