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

Bug 324214

Summary: [c++] Unresolved operator when mixing method template and function
Product: [Tools] CDT Reporter: Markus Schorn <mschorn.eclipse>
Component: cdt-parserAssignee: Markus Schorn <mschorn.eclipse>
Status: RESOLVED FIXED QA Contact: Mike Kucera <mikekucera>
Severity: normal    
Priority: P3    
Version: 7.0   
Target Milestone: 8.0   
Hardware: PC   
OS: Windows XP   
Whiteboard:
Attachments:
Description Flags
testcase + fix mschorn.eclipse: iplog-

Description Markus Schorn CLA 2010-09-01 11:28:25 EDT
When mixing method-templates with global functions for a user-defined operator the overload resolution fails. Here is an example:

struct S {
  int s;
};
struct X {
  template<typename T> S* operator+(T t) const {return 0;}
};
int* operator+(const X&, int *) {return 0;}

void test() {
   X x;
   (x + 1)->s;
}
Comment 1 Markus Schorn CLA 2010-09-01 11:37:39 EDT
Created attachment 177973 [details]
testcase + fix

The patch also cleans up the computation of the implied object type for method calls.
Comment 2 CDT Genie CLA 2010-09-01 12:23:03 EDT
*** cdt cvs genie on behalf of mschorn ***
Bug 324214: Overload resolution with method template and global function.

[*] OpenDeclarationsJob.java 1.19 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/OpenDeclarationsJob.java?root=Tools_Project&r1=1.18&r2=1.19

[*] CPPASTIdExpression.java 1.27 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTIdExpression.java?root=Tools_Project&r1=1.26&r2=1.27
[*] CPPASTLiteralExpression.java 1.25 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTLiteralExpression.java?root=Tools_Project&r1=1.24&r2=1.25
[*] CPPASTFieldReference.java 1.34 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFieldReference.java?root=Tools_Project&r1=1.33&r2=1.34

[*] Conversions.java 1.59 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/Conversions.java?root=Tools_Project&r1=1.58&r2=1.59
[*] CPPVisitor.java 1.130 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.129&r2=1.130
[*] CPPSemantics.java 1.176 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/CPPSemantics.java?root=Tools_Project&r1=1.175&r2=1.176
[*] CPPTemplates.java 1.112 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/CPPTemplates.java?root=Tools_Project&r1=1.111&r2=1.112
[*] LookupData.java 1.50 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.49&r2=1.50

[*] AST2TemplateTests.java 1.190 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.189&r2=1.190
Comment 3 Markus Schorn CLA 2010-09-02 03:18:38 EDT
Fixed in 8.0 > 20100902.