const(Object)ref is here!

Steven Schveighoffer schveiguy at yahoo.com
Mon Dec 6 07:37:27 PST 2010


On Mon, 06 Dec 2010 10:11:30 -0500, so <so at so.do> wrote:

>> It doesn't work.  obj == obj calls .opEquals(obj, obj), whose signature  
>> is:
>>
>> bool opEquals(Object obj1, Object obj2)
>>
>> So even if you mark a derived instance's opEquals as const, the derived  
>> class is stripped back down to Object before any calls are made.
>>
>> Memoization and lazy calculations are not as important as being able to  
>> compare const or immutable objects.
>>
>> -Steve
>
> This one is a very serious issue.
> Should changing their signatures to:
> bool op###(auto ref const Object) const // breaking change but just  
> signature
>
> and addressing "auto ref" enough to fix it?

auto ref doesn't matter, these are classes, they are always ref ;)

All that is needed is to make opEquals const (and its arguments const) as  
you say.

> With a glance to source code, looks like all that is required is just a  
> few lines of change.

It should be relatively painless.  Just change the signatures of the base  
functions, and fix any compile errors.

-Steve


More information about the Digitalmars-d mailing list