From 91c157b041011276de8af8ffdb67343bf93840b0 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Fri, 7 Jan 2011 13:55:39 +0000 Subject: [PATCH] Bug 333325: Default template arguments for function templates. --- .../parser/tests/ast2/AST2TemplateTests.java | 7 ++++++ .../semantics/TemplateArgumentDeduction.java | 25 +++++++++++++------ 2 files changed, 24 insertions(+), 8 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 d2b88b9bfba..8b274ae9492 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 @@ -5186,4 +5186,11 @@ public class AST2TemplateTests extends AST2BaseTest { public void testNonTypeTemplateParameterWithTypenameKeyword_Bug333186() throws Exception { parseAndCheckBindings(); } + + // template void f() { + // f(); + // } + public void testDefaultTmplArgumentOfFunctionTemplate_Bug333325() throws Exception { + parseAndCheckBindings(); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/TemplateArgumentDeduction.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/TemplateArgumentDeduction.java index 36ba86ba72c..b2a6d30da84 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/TemplateArgumentDeduction.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/TemplateArgumentDeduction.java @@ -111,9 +111,11 @@ public class TemplateArgumentDeduction { result.addAll(Arrays.asList(deducedArgs)); } else { ICPPTemplateArgument deducedArg= map.getArgument(tpar); - if (deducedArg == null) - return null; - + if (deducedArg == null) { + deducedArg= tpar.getDefaultValue(); + if (deducedArg == null) + return null; + } result.add(deducedArg); } } @@ -192,8 +194,11 @@ public class TemplateArgumentDeduction { result.addAll(Arrays.asList(deducedArgs)); } else { ICPPTemplateArgument deducedArg= map.getArgument(tpar); - if (deducedArg == null) - return null; + if (deducedArg == null) { + deducedArg= tpar.getDefaultValue(); + if (deducedArg == null) + return null; + } result.add(deducedArg); } @@ -224,9 +229,13 @@ public class TemplateArgumentDeduction { for (int i = 0; i < length; i++) { if (result[i] == null) { - ICPPTemplateArgument deducedArg= map.getArgument(tmplParams[i]); - if (deducedArg == null) - return null; + final ICPPTemplateParameter tpar = tmplParams[i]; + ICPPTemplateArgument deducedArg= map.getArgument(tpar); + if (deducedArg == null) { + deducedArg= tpar.getDefaultValue(); + if (deducedArg == null) + return null; + } result[i]= deducedArg; } }