digitalmars.D.learn - Weird opEquals Problem
- Kevin (50/50) Feb 22 2012 I have the following code which gives the same result on ldc2 and dmd.
I have the following code which gives the same result on ldc2 and dmd. If I compare two objects of different classes I always get false even though the comparator is called. The code: ~~~~~~~~~~~~~~~~~~ import std.stdio; class A { override bool opEquals(Object o) { writeln("In opEquals()"); return true; } } class B { } void main() { auto o1 = new A(); auto o2 = new A(); auto o3 = new B(); writeln(1); assert( o1 == o2 ); writeln(2); assert( o1 == o3 ); // line 26. } ~~~~~~~~~~~~~~~~~~~~~ The output: ~~~~~~~~~~~~~~~~~~~~~ $ dmd -w test.d && ./test 1 In opEquals() 2 In opEquals() core.exception.AssertError test(26): Assertion failure ---------------- ./test() [0x804b246] ./test() [0x8049f32] ./test() [0x8049902] ./test() [0x804b848] ./test() [0x804b355] ./test() [0x804b88f] ./test() [0x804b355] ./test() [0x804b304] /lib/libc.so.6(__libc_start_main+0xf3) [0xb7527483] ---------------- ~~~~~~~~~~~~~~~~~~~~~ The key thing to notice is that opEquals() gets called both times. Any ideas about what is happening?
Feb 22 2012