On Monday, April 30, 2012 07:09:46 Era Scarecrow wrote: > In some code I'm working on, my asserted when I've confirmed it > was correct. With the opCmp() overridden. 'this' refers to the > current object, so why doesn't the first one succeed? > > class X { > int z; > > this(int xx) { > z = xx; > } > > override int opCmp(Object y){ > X x = cast(X) y; > return z - x.z; > } > > void something(X rhs) { > assert(this.opCmp(rhs) == 0); //works fine. > assert(this == rhs); //fails? > } > } > > int main(){ > X a = new X(10); > X b = new X(10); //different objects, same compare value > a.something(b); > return 0; > }
== uses opEquals, not opCmp. It's using Object's opEquals, which does a comparison of the references, so it's true when comparing the exact same object and false otherwise. - Jonathan M Davis