Why are opEquals/opCmp arguments not in or const for Objects?

Timon Gehr timon.gehr at gmx.ch
Sun Mar 17 17:20:40 PDT 2013


On 03/18/2013 01:16 AM, Timon Gehr wrote:
> On 03/18/2013 12:19 AM, Peter Williams wrote:
>> The current signatures for opCmp/opEqual mean that code like:
>>
>>
>> bool strictly_ordered(T)(in T[] list) {
>>      for (auto j = 1; j < list.length; j++) {
>>          if (list[j - 1] >= list[j])
>>              return false;
>>      }
>>      return true;
>> }
>>
>> will fail to compile if T is a class because opCmp cannot be called with
>> a const argument.  This restricts the quality of code that can be
>> written by limiting legitimate use of in/const arguments to
>> functions/methods.
>>
>> Trying to work around this problem by defining opCmp/opEquals for the
>> class being used with in or const argument does not work as they are not
>> recognised as an override of the Object methods.
>>
>
> Yes they are.

Actually you are right.

>
>> So my question is "Why are the arguments to opEquals and opCmp (for
>> Objects) not declared in or const?".
>>
>
> Because not all valid implementations can be. They shouldn't be in
> Object anyway.



More information about the Digitalmars-d mailing list