================ @@ -4348,6 +4348,23 @@ struct PartialSpecMatchResult { VarTemplatePartialSpecializationDecl *Partial; TemplateArgumentList *Args; }; + +struct TemplateArgEqualityComparator { + const ASTContext &Context; + + bool operator()(const TemplateArgument &Canonical, + const TemplateArgument &Unknown) const { + llvm::FoldingSetNodeID ID1, ID2; + Canonical.Profile(ID1, Context); + Context.getCanonicalTemplateArgument(Unknown).Profile(ID2, Context); +#ifndef NDEBUG + llvm::FoldingSetNodeID ID3; + Context.getCanonicalTemplateArgument(Canonical).Profile(ID3, Context); + assert(ID1 == ID3); +#endif + return ID1 == ID2; + } +}; ---------------- zyn0217 wrote:
Can we use `TemplateArgument::structurallyEquals`? If not, we also have `isSameTemplateArg(Context, X, Y)` localized in SemaTemplateDeduction, can we reuse that? https://github.com/llvm/llvm-project/pull/134522 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits