From 1754ae59b281d30260b93145fc18f71894531579 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Wed, 30 Sep 2009 10:30:37 +0000 Subject: [PATCH] Scope for deferred instances, bug 289132. --- .../parser/tests/ast2/AST2TemplateTests.java | 18 ++++++++++++++++++ .../dom/parser/cpp/semantics/CPPTemplates.java | 11 ++++++----- 2 files changed, 24 insertions(+), 5 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 645cc626f6f..fd297d587bd 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 @@ -4149,4 +4149,22 @@ public class AST2TemplateTests extends AST2BaseTest { ICPPFunction func= bh.assertNonProblem("f(x)", 1, ICPPFunction.class); assertFalse(func instanceof ICPPUnknownBinding); } + + // class NullType {}; + // template struct TypeList { + // typedef T Head; + // typedef U Tail; + // }; + // + // template struct CreateTL { + // typedef TypeList::Type> Type; + // }; + // + // template<> struct CreateTL { + // typedef NullType Type; + // }; + public void testDefaultArgument_289132() throws Exception { + final String code= getAboveComment(); + parseAndCheckBindings(code, ParserLanguage.CPP); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java index c4e4ad1baa1..195c5b0fb86 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java @@ -1311,11 +1311,12 @@ public class CPPTemplates { } public static boolean areSameArguments(ICPPTemplateArgument[] args, ICPPTemplateArgument[] specArgs) { - if (args.length == specArgs.length) { - for (int i=0; i < args.length; i++) { - if (!specArgs[i].isSameValue(args[i])) - return false; - } + if (args.length != specArgs.length) { + return false; + } + for (int i=0; i < args.length; i++) { + if (!specArgs[i].isSameValue(args[i])) + return false; } return true; }