]> granicus.if.org Git - clang/commitdiff
Minor cleanups for template argument deduction in the presence of
authorDouglas Gregor <dgregor@apple.com>
Tue, 4 Jan 2011 22:23:38 +0000 (22:23 +0000)
committerDouglas Gregor <dgregor@apple.com>
Tue, 4 Jan 2011 22:23:38 +0000 (22:23 +0000)
variadic templates. No functionality change.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122847 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaTemplateDeduction.cpp

index 82693dd228d6867e0f3f68dc11d05f66106261fa..91d65c281a823e834726278f35eb5ed1ad80e6da 100644 (file)
@@ -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<TemplateArgument, 4> 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<NamedDecl *>(
-                          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(),