================
@@ -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

Reply via email to