================ @@ -6120,6 +6119,19 @@ ExpectedDecl ASTNodeImporter::VisitClassTemplateDecl(ClassTemplateDecl *D) { // see ASTTests test ImportExistingFriendClassTemplateDef. continue; } + // When importing a friend, it is possible that multiple declarations + // with same name can co-exist in specific cases (if a template contains + // a friend template and has a specialization). For this case the + // declarations should match, except that the "template depth" is + // different. No linking of previous declaration is needed in this case. + // FIXME: This condition may need refinement. + if (D->getFriendObjectKind() != Decl::FOK_None && + FoundTemplate->getFriendObjectKind() != Decl::FOK_None && + D->getFriendObjectKind() != FoundTemplate->getFriendObjectKind() && + IsStructuralMatch(D, FoundTemplate, /*Complain=*/false, + /*IgnoreTemplateParmDepth=*/true)) + continue; ---------------- Michael137 wrote:
It feels like the logic on 6103 and this here could be merged together? Should `IgnoreTemplateParmDepth` on 6104 just be changed to also be set if the `FriendObjectKind` matches? Then I *think* everything should work out as expected https://github.com/llvm/llvm-project/pull/115734 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits