================
@@ -60,3 +60,26 @@ template<class T1> C1<X<X<T1>>> auto t3() {
 template C1<X<X<int>>> auto t3<int>();
 static_assert(is_same<decltype(t3<int>()), X<X<X<int>>>>);
 #endif
+
+namespace GH95735 {
+
+int g(int fn) {
+  return [f = fn](auto tpl) noexcept(noexcept(f)) { return f; }(0);
+}
+
+int foo(auto... fn) {
+  // FIXME: This one hits the assertion "if the exception specification is 
dependent,
+  // then the noexcept expression should be value-dependent" in the 
constructor of
+  // FunctionProtoType.
+  // One possible solution is to update Sema::canThrow() to consider 
expressions
+  // (e.g. DeclRefExpr/FunctionParmPackExpr) involving unexpanded parameters 
as Dependent.
+  // This would effectively add an extra value-dependent flag to the noexcept 
expression.
+  // However, I'm afraid that would also cause ABI breakage.
+  // [...f = fn](auto tpl) noexcept(noexcept(f)) { return 0; }(0);
----------------
zyn0217 wrote:

We have that check: with a non-assertion build, we would correctly diagnose 
against the unexpanded pack here.
However, that check happens after we form a FunctionProtoType, where an 
assertion would have been encountered.

https://github.com/llvm/llvm-project/pull/97166
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to