Comparison
Jonas Drewsen
nospam4321 at hotmail.com
Thu Nov 28 05:23:20 PST 2013
On Wednesday, 27 November 2013 at 00:46:30 UTC, Ary Borenszweig
wrote:
> On 11/26/13 7:00 PM, Namespace wrote:
>> On Tuesday, 26 November 2013 at 21:37:49 UTC, Jonas Drewsen
>> wrote:
>>> Isn't it a bug that the assertion is triggered for this:
>>>
>>> class Test3 {}
>>>
>>> void main()
>>> {
>>> assert( (new Test3()) == (new Test3()) );
>>> }
>>>
>>> Tried it on http://dpaste.dzfl.pl/ as well.
>>>
>>> /Jonas
>>
>> Because your Test3 class has probably no own opEquals method,
>> your
>> comparison is the same as
>> assert( (new Test3()) is (new Test3()) );
>> which is obviously wrong.
>>
>> See:
>> https://github.com/D-Programming-Language/druntime/blob/master/src/object_.d#L116
>>
>
> The ddoc for the method is wrong. It should say something like:
>
> returns != 0 if this object has the same memory address as obj.
> Subclasses may override this method to provide custom equality
> comparison.
>
> Because for the OP, Test3 has the same contents as the other
> Test3 (both empty).
"does have the same contents as obj"
yes this is what confused me... and actually, it is a bit wierd
coming from a c++ background that obj1 == obj2 is the same as
(obj1 is obj2) and not per field comparison as expected (and
documented). What is the reasoning behind this... principle of
most astonishment? :)
More information about the Digitalmars-d-learn
mailing list