erichkeane added a comment. In D134128#3865063 <https://reviews.llvm.org/D134128#3865063>, @lime wrote:
>> which isn't clear to me what you mean > > - In the function `Sema::CheckTemplateArgument` at line 5725, `Params` has > been substituted in a way all `TemplateTypeParmDecl`s are instantiated with a > smaller depth, and so are constraints of them at > SemaTemplateInstantiateDecl.cpp:2769, while the requires clause remains the > same. > - Then `CheckTemplateArgument` calls `CheckTemplateTemplateArgument` which > calls `IsAtLeastAsConstrained` with the original declaration and the > constraints collected from `Params`. Thus, in `IsAtLeastAsConstrained`, a > depth calculated from the declaration will not reflect the depth in the > constraint. > - It should be fine to not adjust the depths between two constraints passed > to `IsAtLeastAsConstrained` if the requires clause is not parsed, as they are > already the same. But it is not the case when the constraint is from a > requires clause, as requires clauses are not substituted. However, > calculating from declarations will break the original case. It sounds like perhaps we've instantiated constraints we shouldn't have in the case of template-template parameters. Based on what you're saying, I'm concerned then that perhaps the deferred concept instantiation didn't work right for template-template constraints? That might require more work on that then before anything could happen here. Otherwise, I would expect calculating from the Template Template Decl to work, (though its likely it doesn't actually 'add' a layer yet, since I don't think we've needed that yet, so an extra bit of work there would need to be done). >> I wouldn't expect the requires clause (nor any other concept related AST >> node) to be instantiated at all until it is going through 'checking' > > The function `TemplateDeclInstantiator::SubstTemplateParams` instantiates > constraints like `template <template <C T> class>`, so it is already happened. If that is happening outside of a constraint evaluation, that is likely incorrect, and perhaps part of the problem. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D134128/new/ https://reviews.llvm.org/D134128 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits