From a45fabad98a0f65e73244485430ea6738ad808ee Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Wed, 27 Nov 2013 16:21:54 -0800 Subject: [PATCH] Bug 422700 - Name resolution problem with variadic template. --- .../cdt/core/parser/tests/ast2/AST2TemplateTests.java | 10 ++++++++++ .../cdt/internal/core/dom/parser/cpp/CPPFunction.java | 10 ++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java index 096f16561c5..451db29d304 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java @@ -4999,6 +4999,16 @@ public class AST2TemplateTests extends AST2TestBase { parseAndCheckBindings(); } + // template + // struct A { + // static int waldo(T... p, int q); + // }; + // + // int x = A<>::waldo(0); + public void testVariadicTemplateWithNoArguments_422700() throws Exception { + parseAndCheckBindings(); + } + // struct Test { // void Update() {} // }; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunction.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunction.java index 609079c9ed7..088bd9e752f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunction.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunction.java @@ -43,7 +43,6 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeclSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDefinition; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTInitializerClause; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName; import org.eclipse.cdt.core.dom.ast.cpp.ICPPBlockScope; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassScope; import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction; @@ -602,19 +601,18 @@ public class CPPFunction extends PlatformObject implements ICPPFunction, ICPPInt } public static int getRequiredArgumentCount(ICPPParameter[] pars) { - int result= pars.length; - while (result > 0) { - final ICPPParameter p = pars[result - 1]; + int result = pars.length; + for (int i = pars.length; --i >= 0;) { + final ICPPParameter p = pars[i]; if (p.hasDefaultValue() || p.isParameterPack()) { result--; } else { if (pars.length == 1 && SemanticUtil.isVoidType(p.getType())) { return 0; } - return result; } } - return 0; + return result; } @Override