================ @@ -2474,19 +2474,46 @@ bool CXXMethodDecl::isUsualDeallocationFunction( getOverloadedOperator() != OO_Array_Delete) return false; + auto NumParams = getNumParams(); + bool IsTypeAware = IsTypeAwareOperatorNewOrDelete(); + // C++ [basic.stc.dynamic.deallocation]p2: // A template instance is never a usual deallocation function, // regardless of its signature. - if (getPrimaryTemplate()) - return false; + if (auto *PrimaryTemplate = getPrimaryTemplate()) { + // Addendum: a template instance is a usual deallocation function if there + // is a single template parameter, that parameter is a type, only the first + // parameter is dependent, and that parameter is a specialization of + // std::type_identity + if (!IsTypeAware) { + // Stop early on if the specialization is not explicitly type aware + return false; + } + + auto *SpecializedDecl = PrimaryTemplate->getTemplatedDecl(); ---------------- ojhunt wrote:
Done. <!-- Reviewable comment -OMoyoc-7JhiEl3dK9zg:b-896fix --> <!-- Sent from Reviewable.io --> https://github.com/llvm/llvm-project/pull/113510 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits