On Tue, 13 Apr 2010 18:04:04 -0400, Ali Çehreli <acehr...@yahoo.com> wrote:

Christoph Mueller is asking the exact problem that I've been having. :)

Steven Schveighoffer wrote:

 > If you are using D2, there is a workaround:
 >
 > interface I
 > {
 >    final bool opEquals(I other)
 >    {
 >       Object me = cast(Object)this;
 >       Object they = cast(Object)other;
 >       return equals(me, they);

Is 'equals' a function on this interface?

No, it's a new global function in object.di, and it's called opEquals, not equals. I guess I messed that up royally :)

Just do me == they;

That will call the function.

But it still calls Object.opEquals:

Error: function object.opEquals (Object lhs, Object rhs) is not callable using argument types (I,I)

This is not Object.opEquals, it's object.opEquals -- note the capitalization. The latter is a standalone function in module object.


Error: cannot implicitly convert expression (i) of type deneme.I to object.Object Error: cannot implicitly convert expression (i) of type deneme.I to object.Object

This is a bug. i == i should call the opEquals method on i. Instead, the compiler is trying to call the standalone opEquals(Object, Object) function.

I confirmed with 2.043 that this is a bug.  I'll file with a test case.

-Steve

Reply via email to