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