Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 341747

Summary: [c++] Ambiguity between template-id and binary expression
Product: [Tools] CDT Reporter: Markus Schorn <mschorn.eclipse>
Component: cdt-parserAssignee: Markus Schorn <mschorn.eclipse>
Status: RESOLVED FIXED QA Contact: Markus Schorn <mschorn.eclipse>
Severity: normal    
Priority: P3 CC: cdtdoug
Version: 8.0   
Target Milestone: 8.0   
Hardware: PC   
OS: Windows 7   
Whiteboard:
Attachments:
Description Flags
testcases + fix mschorn.eclipse: iplog-

Description Markus Schorn CLA 2011-04-04 04:53:00 EDT
There is an ambiguity between template-ids and binary expressions. The parser handles it via a heuristics. The following example is extracted from the gcc-header files:

template<bool> struct S {
	static int m();
};
int f();
int s;

void test() {
    S<1 && 2>::m();        // m is member of S
    s<1 && 2>::f();        // f is global
}
Comment 1 Markus Schorn CLA 2011-04-11 08:33:50 EDT
Created attachment 192924 [details]
testcases + fix
Comment 2 Markus Schorn CLA 2011-04-11 08:40:06 EDT
Fixed in 8.0 > 20110411.
Comment 3 CDT Genie CLA 2011-04-11 09:23:08 EDT
*** cdt cvs genie on behalf of mschorn ***
Bug 341747: Ambiguity between template-id and binary expression.

[*] AST2TemplateTests.java 1.212 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java?root=Tools_Project&r1=1.211&r2=1.212
[*] AST2Tests.java 1.268 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java?root=Tools_Project&r1=1.267&r2=1.268

[*] AddIncludeTest.java 1.9 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/AddIncludeTest.java?root=Tools_Project&r1=1.8&r2=1.9

[*] CPPVisitor.java 1.151 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java?root=Tools_Project&r1=1.150&r2=1.151
[*] LookupData.java 1.55 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/LookupData.java?root=Tools_Project&r1=1.54&r2=1.55

[+] NameOrTemplateIDVariants.java  http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/NameOrTemplateIDVariants.java?root=Tools_Project&revision=1.1&view=markup
[*] CPPASTAmbiguityResolver.java 1.13 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguityResolver.java?root=Tools_Project&r1=1.12&r2=1.13
[+] TemplateIdStrategy.java  http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/TemplateIdStrategy.java?root=Tools_Project&revision=1.1&view=markup
[+] CPPASTTemplateIDAmbiguity.java  http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplateIDAmbiguity.java?root=Tools_Project&revision=1.1&view=markup
[*] GNUCPPSourceParser.java 1.248 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java?root=Tools_Project&r1=1.247&r2=1.248

[*] GNUCSourceParser.java 1.157 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java?root=Tools_Project&r1=1.156&r2=1.157

[*] AbstractGNUSourceCodeParser.java 1.160 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java?root=Tools_Project&r1=1.159&r2=1.160