alexander-shaposhnikov added a comment. @erichkeane - thanks for the comments, the changes in SemaTemplateInstantiateDecl.cpp are necessary, in particular, they enable us to handle the case
template <class T0> concept Constraint = true; template <Constraint T1> struct Iterator { template <Constraint T2> friend class Iterator; }; Iterator<int*> I; (and the negative one) with the same machinery. Regarding SFINAE - it's necessary as well, the failed substitution is considered as "not equal" (according to the standard (mentioned by Richard above)). Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D146178/new/ https://reviews.llvm.org/D146178 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits