diff options
author | Markus Schorn | 2010-02-08 13:22:48 +0000 |
---|---|---|
committer | Markus Schorn | 2010-02-08 13:22:48 +0000 |
commit | c6176c6b67bf54e0d7932f4d9a1647ab1e21ef47 (patch) | |
tree | 3d72b5de2e08f44eb0d111f88eb0125c3961c7ca /core/org.eclipse.cdt.core.tests | |
parent | 84a04a9f2afb2947e2e2a0ff62ef32559dd736ba (diff) | |
download | org.eclipse.cdt-c6176c6b67bf54e0d7932f4d9a1647ab1e21ef47.tar.gz org.eclipse.cdt-c6176c6b67bf54e0d7932f4d9a1647ab1e21ef47.tar.xz org.eclipse.cdt-c6176c6b67bf54e0d7932f4d9a1647ab1e21ef47.zip |
Bug 294730: Default template arguments for function templates.
Diffstat (limited to 'core/org.eclipse.cdt.core.tests')
2 files changed, 24 insertions, 1 deletions
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2BaseTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2BaseTest.java index 187cded860d..bc1f309d6c1 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2BaseTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2BaseTest.java @@ -497,7 +497,7 @@ public class AST2BaseTest extends BaseTestCase { public <T extends IBinding> T assertNonProblem(String section, int len) { if (len <= 0) - len= section.length()-len; + len= section.length()+len; IBinding binding= binding(section, len); if (binding instanceof IProblemBinding) { IProblemBinding problem= (IProblemBinding) binding; 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 93e53ecaa7f..831abef7059 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 @@ -4754,4 +4754,27 @@ public class AST2TemplateTests extends AST2BaseTest { final String code= getAboveComment(); parseAndCheckBindings(code, ParserLanguage.CPP); } + + // template <class T, class U = double> void f(T t = 0, U u = 0); + // void g() { + // f(1, 'c'); // f<int,char>(1,'c') + // f(1); // f<int,double>(1,0) + // f(); // error: T cannot be deduced + // f<int>(); // f<int,double>(0,0) + // f<int,char>(); // f<int,char>(0,0) + // } + public void testDefaultTemplateArgsForFunctionTemplates_294730() throws Exception { + final String code= getAboveComment(); + BindingAssertionHelper bh= new BindingAssertionHelper(code, true); + + ICPPTemplateInstance f= bh.assertNonProblem("f(1, 'c');", 1); + assertEquals("<int,char>", ASTTypeUtil.getArgumentListString(f.getTemplateArguments(), true)); + f= bh.assertNonProblem("f(1);", 1); + assertEquals("<int,double>", ASTTypeUtil.getArgumentListString(f.getTemplateArguments(), true)); + bh.assertProblem("f();", 1); + f= bh.assertNonProblem("f<int>();", -3); + assertEquals("<int,double>", ASTTypeUtil.getArgumentListString(f.getTemplateArguments(), true)); + f= bh.assertNonProblem("f<int,char>();", -3); + assertEquals("<int,char>", ASTTypeUtil.getArgumentListString(f.getTemplateArguments(), true)); + } } |