WAT: opCmp and opEquals woes
deadalnix via Digitalmars-d
digitalmars-d at puremagic.com
Wed Jul 23 18:34:05 PDT 2014
On Wednesday, 23 July 2014 at 23:52:01 UTC, Andrei Alexandrescu
wrote:
> On 7/23/14, 3:39 PM, H. S. Teoh via Digitalmars-d wrote:
>> On Wed, Jul 23, 2014 at 02:35:03PM -0700, Andrei Alexandrescu
>> via Digitalmars-d wrote:
>>> On 7/23/14, 11:52 AM, H. S. Teoh via Digitalmars-d wrote:
>> [...]
>>>> I fully agree that we should not autogenerate opCmp if the
>>>> user
>>>> defines opEquals, since not all types comparable with
>>>> equality are
>>>> orderable. However, surely all orderable types are
>>>> equality-comparable!
>>>
>>> http://en.wikipedia.org/wiki/Lattice_(order)
>> [...]
>>
>> And why should this be the default behaviour? The <, <=, >=, >
>> operators
>> imply linear ordering, not general partial order. If you
>> really want to
>> implement a non-linear partial ordering, you can always define
>> both
>> opCmp and opEquals. This should be the *non*-default case,
>> since in the
>> vast majority of cases, defining opCmp means you want a linear
>> ordering.
>> Linear ordering should be default, and partial ordering
>> possible if the
>> programmer explicitly asks for it (by implementing opEquals
>> manually).
>
> I'm unconvinced. Most algorithms that need inequality don't
> need equality comparison; instead, they consider objects for
> which both !(a < b) && !(b < a) in the same "equivalence class"
> that doesn't assume they are actually equal.
>
> Bottom line, inferring opEquals from opCmp seems fishy.
>
>
> Andrei
NaN is a good example.
More information about the Digitalmars-d
mailing list