[clang] [clang-tools-extra] [clang] Implement CWG2398 provisional TTP matching to class templates (PR #94981)
via cfe-commits
cfe-commits at lists.llvm.org
Thu Sep 5 09:50:35 PDT 2024
================
@@ -6797,15 +6821,58 @@ ASTContext::getCanonicalTemplateName(const TemplateName &Name) const {
canonArgPack, subst->getAssociatedDecl()->getCanonicalDecl(),
subst->getFinal(), subst->getIndex());
}
+ case TemplateName::DeducedTemplate: {
+ assert(IgnoreDeduced == false);
+ DeducedTemplateStorage *DTS = Name.getAsDeducedTemplateName();
+ DefaultArguments DefArgs = DTS->getDefaultArguments();
+ TemplateName Underlying = DTS->getUnderlying();
+
+ TemplateName CanonUnderlying =
+ getCanonicalTemplateName(Underlying, /*IgnoreDeduced=*/true);
+ bool NonCanonical = CanonUnderlying != Underlying;
+ auto CanonArgs =
+ getCanonicalTemplateArguments(*this, DefArgs.Args, NonCanonical);
+
+ ArrayRef<NamedDecl *> Params =
+ CanonUnderlying.getAsTemplateDecl()->getTemplateParameters()->asArray();
+ assert(CanonArgs.size() <= Params.size());
+ // A deduced template name which deduces the same default arguments already
+ // declared in the underlying template, is the same template as the
----------------
cor3ntin wrote:
```suggestion
// declared in the underlying template is the same template as the
```
https://github.com/llvm/llvm-project/pull/94981
More information about the cfe-commits
mailing list