Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Schorn2010-02-08 13:22:48 +0000
committerMarkus Schorn2010-02-08 13:22:48 +0000
commitc6176c6b67bf54e0d7932f4d9a1647ab1e21ef47 (patch)
tree3d72b5de2e08f44eb0d111f88eb0125c3961c7ca /core/org.eclipse.cdt.core.tests
parent84a04a9f2afb2947e2e2a0ff62ef32559dd736ba (diff)
downloadorg.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')
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2BaseTest.java2
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java23
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));
+ }
}

Back to the top