Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 324214 - [c++] Unresolved operator when mixing method template and function
Summary: [c++] Unresolved operator when mixing method template and function
Status: RESOLVED FIXED
Alias: None
Product: CDT
Classification: Tools
Component: cdt-parser (show other bugs)
Version: 7.0   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: 8.0   Edit
Assignee: Markus Schorn CLA
QA Contact: Mike Kucera CLA
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-09-01 11:28 EDT by Markus Schorn CLA
Modified: 2010-09-02 03:18 EDT (History)
0 users

See Also:


Attachments
testcase + fix (33.58 KB, patch)
2010-09-01 11:37 EDT, Markus Schorn CLA
mschorn.eclipse: iplog-
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
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.