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 "" } +}
