1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Resolution of overloaded operators. Bug 248803.

This commit is contained in:
Sergey Prigogin 2008-09-27 00:07:18 +00:00
parent d7dee70d25
commit 6aa77b925c
2 changed files with 25 additions and 1 deletions

View file

@ -123,6 +123,7 @@ import org.eclipse.cdt.internal.core.parser.ParserException;
public class AST2CPPTests extends AST2BaseTest { public class AST2CPPTests extends AST2BaseTest {
public AST2CPPTests() { public AST2CPPTests() {
} }
@ -6026,4 +6027,23 @@ public class AST2CPPTests extends AST2BaseTest {
ICPPFunction func2= helper.assertNonProblem("func(y)", 4, ICPPFunction.class); ICPPFunction func2= helper.assertNonProblem("func(y)", 4, ICPPFunction.class);
assertNotSame(func1, func2); assertNotSame(func1, func2);
} }
// struct A {
// const char& operator[](int pos) const;
// char& operator[](int pos);
// };
//
// void func(const char& c);
// void func(char& c);
//
// void test(const A& x, A& y) {
// func(x[0]);
// func(y[0]);
// }
public void testOverloadedOperator_248803() throws Exception {
BindingAssertionHelper helper= new BindingAssertionHelper(getAboveComment(), true);
ICPPFunction func1= helper.assertNonProblem("func(x[0])", 4, ICPPFunction.class);
ICPPFunction func2= helper.assertNonProblem("func(y[0])", 4, ICPPFunction.class);
assertNotSame(func1, func2);
}
} }

View file

@ -2026,8 +2026,12 @@ public class CPPVisitor {
} else if (expression instanceof IASTArraySubscriptExpression) { } else if (expression instanceof IASTArraySubscriptExpression) {
IType t = getExpressionType(((IASTArraySubscriptExpression) expression).getArrayExpression()); IType t = getExpressionType(((IASTArraySubscriptExpression) expression).getArrayExpression());
try { try {
if (t instanceof ICPPReferenceType) if (t instanceof ICPPReferenceType) {
t = ((ICPPReferenceType)t).getType(); t = ((ICPPReferenceType)t).getType();
}
if (t instanceof IQualifierType) {
t = ((IQualifierType) t).getType();
}
while (t instanceof ITypedef) { while (t instanceof ITypedef) {
t = ((ITypedef)t).getType(); t = ((ITypedef)t).getType();
} }