Browse Source

Overload comparison operators only if their native counterpart return bool.

pull/219/merge
Elias Holzer 12 years ago committed by triton
parent
commit
a115bd9a51
  1. 9
      src/Generator/Passes/CheckOperatorsOverloads.cs
  2. 6
      tests/Basic/Basic.h

9
src/Generator/Passes/CheckOperatorsOverloads.cs

@ -180,15 +180,18 @@ namespace CppSharp.Passes @@ -180,15 +180,18 @@ namespace CppSharp.Passes
// The array indexing operator can be overloaded
case CXXOperatorKind.Subscript:
// The comparison operators can be overloaded
// The conversion operator can be overloaded
case CXXOperatorKind.Conversion:
return true;
// The comparison operators can be overloaded if their return type is bool
case CXXOperatorKind.EqualEqual:
case CXXOperatorKind.ExclaimEqual:
case CXXOperatorKind.Less:
case CXXOperatorKind.Greater:
case CXXOperatorKind.LessEqual:
case CXXOperatorKind.GreaterEqual:
case CXXOperatorKind.Conversion:
return true;
return @operator.ReturnType.Type.IsPrimitiveType(PrimitiveType.Bool);
// Only prefix operators can be overloaded
case CXXOperatorKind.PlusPlus:

6
tests/Basic/Basic.h

@ -229,6 +229,12 @@ DLL_API TestMoveOperatorToClass operator+(const TestMoveOperatorToClass& b1, @@ -229,6 +229,12 @@ DLL_API TestMoveOperatorToClass operator+(const TestMoveOperatorToClass& b1,
return b;
}
// Not a valid operator overload for Foo2 in managed code - comparison operators need to return bool.
DLL_API int operator==(const Foo2& a, const Foo2& b)
{
return 0;
}
// Tests delegates
typedef int (*DelegateInGlobalNamespace)(int);

Loading…
Cancel
Save