aboutsummaryrefslogtreecommitdiff
path: root/lib/Sema/SemaTemplateDeduction.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2011-01-04 22:23:38 +0000
committerDouglas Gregor <dgregor@apple.com>2011-01-04 22:23:38 +0000
commit033a3cad525e5b221ba035ffc3e0abfa1241d90e (patch)
treeb41e2e27d8f9d163dae7cf00a21e9d646332ce20 /lib/Sema/SemaTemplateDeduction.cpp
parent843cb8d425851a21c765114a1bbf049f0bb3e630 (diff)
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
Diffstat (limited to 'lib/Sema/SemaTemplateDeduction.cpp')
-rw-r--r--lib/Sema/SemaTemplateDeduction.cpp13
1 files changed, 3 insertions, 10 deletions
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<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(),