@@ -3990,7 +3990,8 @@ bool Sema::usesPartialOrExplicitSpecialization(
39903990 // given (implicit) specialization of the enclosing class template, the
39913991 // primary member template and its other partial specializations are still
39923992 // considered for this specialization of the enclosing class template.
3993- if (CTD->isMemberSpecialization () && !CTPSD->isMemberSpecialization ())
3993+ if (CTD->getMostRecentDecl ()->isMemberSpecialization () &&
3994+ !CTPSD->getMostRecentDecl ()->isMemberSpecialization ())
39943995 continue ;
39953996
39963997 TemplateDeductionInfo Info (Loc);
@@ -4037,8 +4038,7 @@ getPatternForClassTemplateSpecialization(
40374038 SmallVector<ClassTemplatePartialSpecializationDecl *, 4 > PartialSpecs;
40384039 Template->getPartialSpecializations (PartialSpecs);
40394040 TemplateSpecCandidateSet FailedCandidates (PointOfInstantiation);
4040- for (unsigned I = 0 , N = PartialSpecs.size (); I != N; ++I) {
4041- ClassTemplatePartialSpecializationDecl *Partial = PartialSpecs[I];
4041+ for (ClassTemplatePartialSpecializationDecl *Partial : PartialSpecs) {
40424042 // C++ [temp.spec.partial.member]p2:
40434043 // If the primary member template is explicitly specialized for a given
40444044 // (implicit) specialization of the enclosing class template, the
@@ -4049,8 +4049,8 @@ getPatternForClassTemplateSpecialization(
40494049 // primary member template and its other partial specializations are
40504050 // still considered for this specialization of the enclosing class
40514051 // template.
4052- if (Template->isMemberSpecialization () &&
4053- !Partial->isMemberSpecialization ())
4052+ if (Template->getMostRecentDecl ()-> isMemberSpecialization () &&
4053+ !Partial->getMostRecentDecl ()-> isMemberSpecialization ())
40544054 continue ;
40554055
40564056 TemplateDeductionInfo Info (FailedCandidates.getLocation ());
0 commit comments