this compare not using opCmp?

Jonathan M Davis jmdavisProg at gmx.com
Sun Apr 29 22:22:34 PDT 2012


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


More information about the Digitalmars-d-learn mailing list