From: Douglas Gregor Date: Tue, 4 Jan 2011 22:23:38 +0000 (+0000) Subject: Minor cleanups for template argument deduction in the presence of X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=033a3cad525e5b221ba035ffc3e0abfa1241d90e;p=clang Minor cleanups for template argument deduction in the presence of variadic templates. No functionality change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122847 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaTemplateDeduction.cpp b/lib/Sema/SemaTemplateDeduction.cpp index 82693dd228..91d65c281a 100644 --- a/lib/Sema/SemaTemplateDeduction.cpp +++ b/lib/Sema/SemaTemplateDeduction.cpp @@ -1330,17 +1330,11 @@ FinishTemplateArgumentDeduction(Sema &S, // C++ [temp.deduct.type]p2: // [...] or if any template argument remains neither deduced nor // explicitly specified, template argument deduction fails. - // FIXME: Variadic templates Empty parameter packs? llvm::SmallVector Builder; - for (unsigned I = 0, N = Deduced.size(); I != N; ++I) { + TemplateParameterList *PartialParams = Partial->getTemplateParameters(); + for (unsigned I = 0, N = PartialParams->size(); I != N; ++I) { if (Deduced[I].isNull()) { - unsigned ParamIdx = I; - if (ParamIdx >= Partial->getTemplateParameters()->size()) - ParamIdx = Partial->getTemplateParameters()->size() - 1; - Decl *Param - = const_cast( - Partial->getTemplateParameters()->getParam(ParamIdx)); - Info.Param = makeTemplateParameter(Param); + Info.Param = makeTemplateParameter(PartialParams->getParam(I)); return Sema::TDK_Incomplete; } @@ -3294,7 +3288,6 @@ Sema::MarkDeducedTemplateParameters(FunctionTemplateDecl *FunctionTemplate, Deduced.clear(); Deduced.resize(TemplateParams->size()); - // FIXME: Variadic templates. FunctionDecl *Function = FunctionTemplate->getTemplatedDecl(); for (unsigned I = 0, N = Function->getNumParams(); I != N; ++I) ::MarkUsedTemplateParameters(*this, Function->getParamDecl(I)->getType(),