[clang] [Clang][Concepts] Fix a constraint comparison regression for out-of-line ClassTemplateDecls (PR #102587)
Younan Zhang via cfe-commits
cfe-commits at lists.llvm.org
Fri Aug 9 22:50:59 PDT 2024
================
@@ -599,3 +599,39 @@ template <class DerT>
unsigned long DerivedCollection<DerTs...>::index() {}
} // namespace GH72557
+
+namespace GH102320 {
+
+template <class, class>
+concept Constrained = true;
+
+template <class T> class C {
+ template <Constrained<T>> class D;
+ template <class U>
+ requires Constrained<T, U>
+ class E;
+};
+
+template <class T> template <Constrained<T>> class C<T>::D {};
+
+template <class T>
+template <class U>
+ requires Constrained<T, U>
+class C<T>::E {};
+
+#if 0
+// FIXME: Is it conforming? Only Clang rejects it in every released version.
+template <>
+template <Constrained<int> T>
+class C<int>::D<T> {};
+#endif
+
----------------
zyn0217 wrote:
I DIDN’T say this is a regression, but rather we’ve been rejecting it in many versions.
The function per se is called SubstituteConstraintExpressionWithoutSatisfaction, so not transforming the constraint appears to go against the intention of it to me.
https://github.com/llvm/llvm-project/pull/102587
More information about the cfe-commits
mailing list