================ @@ -3553,6 +3553,47 @@ static unsigned getPackIndexForParam(Sema &S, llvm_unreachable("parameter index would not be produced from template"); } +// if `Specialization` is a `CXXConstructorDecl` or `CXXConversionDecl`, +// we'll try to instantiate and update its explicit specifier after constraint +// checking. +static Sema::TemplateDeductionResult instantiateExplicitSpecifierDeferred( + Sema &S, FunctionDecl *Specialization, + const MultiLevelTemplateArgumentList &SubstArgs, + TemplateDeductionInfo &Info, FunctionTemplateDecl *FunctionTemplate, + ArrayRef<TemplateArgument> DeducedArgs) { + auto GetExplicitSpecifier = [](FunctionDecl *D) { + return isa<CXXConstructorDecl>(D) + ? cast<CXXConstructorDecl>(D)->getExplicitSpecifier() + : cast<CXXConversionDecl>(D)->getExplicitSpecifier(); + }; + auto SetExplicitSpecifier = [](FunctionDecl *D, ExplicitSpecifier ES) { + isa<CXXConstructorDecl>(D) + ? cast<CXXConstructorDecl>(D)->setExplicitSpecifier(ES) + : cast<CXXConversionDecl>(D)->setExplicitSpecifier(ES); + }; + + ExplicitSpecifier ES = GetExplicitSpecifier(Specialization); + Expr *const Expr = ES.getExpr(); + if (!Expr) ---------------- erichkeane wrote:
perhaps value in combining these two `if` statements, don't feel strongly though. https://github.com/llvm/llvm-project/pull/70548 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits