================ @@ -11723,6 +11764,40 @@ static void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, return; } + // Errors in deduction guides from inherited constructors + // will present as substitution failures in the mapping + // partial specialization, so we show a generic diagnostic + // in this case. + if (auto *DG = dyn_cast<CXXDeductionGuideDecl>(Templated); + DG && DG->getSourceKind() == + CXXDeductionGuideDecl::SourceKind::InheritedConstructor) { + CXXDeductionGuideDecl *Source = DG->getSourceDeductionGuide(); + assert(Source && + "Inherited constructor deduction guides must have a source"); + auto DeducedRecordType = + QualType(cast<ClassTemplateDecl>(DG->getDeducedTemplate()) + ->getTemplatedDecl() + ->getTypeForDecl(), + 0); + auto InheritedRecordType = + QualType(cast<ClassTemplateDecl>(Source->getDeducedTemplate()) + ->getTemplatedDecl() + ->getTypeForDecl(), + 0); ---------------- mizvekov wrote:
Is the cast to QualType really necessary here? I thought the diagnostic engine could have Type* just fine. In any case, the last argument should not be necessary. ```suggestion auto DeducedRecordType = QualType(cast<ClassTemplateDecl>(DG->getDeducedTemplate()) ->getTemplatedDecl() ->getTypeForDecl()); auto InheritedRecordType = QualType(cast<ClassTemplateDecl>(Source->getDeducedTemplate()) ->getTemplatedDecl() ->getTypeForDecl()); ``` https://github.com/llvm/llvm-project/pull/98788 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits