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; } }