How will we fix opEquals?

Steven Schveighoffer schveiguy at yahoo.com
Thu Feb 10 07:33:40 PST 2011


On Thu, 10 Feb 2011 10:19:50 -0500, Andrei Alexandrescu  
<SeeWebsiteForEmail at erdani.org> wrote:

> On 2/10/11 2:58 AM, Peter Alexander wrote:
>> On 10/02/11 8:19 AM, Don wrote:
>>> Andrei once stated a worthy goal: as far as possible, const should be
>>> opt-in: it should be possible to code without requiring const on
>>> everything.
>>>
>>> opEquals() is in conflict with this, since it is a member function of
>>> Object.
>>>
>>> (1) If it is a const member function, then it will have a viral effect
>>> on all objects -- any function called by opEquals will have to be  
>>> marked
>>> const.
>>> (2) If it is not const, then const objects cannot be compared!
>>>
>>> Currently, it's not const, but the problem isn't visible because of
>>> compiler bug 5080. (Same problem applies to opCmp).
>>>
>>> How will we break this dilemma?
>>
>> It's not possible.
>
> It is, in fact, possible. We can define two opEquals overloads, for  
> const and non-const. By default, the non-const version forwards to the  
> const one.

This doesn't work.  If you only define one, then you will have problems  
with hidden function errors, and/or inconsistencies.  For example, how  
does .opEquals(Object obj1, Object obj2) know which version to call?

I think the only true solution is to make it const and call it a day.

-Steve


More information about the Digitalmars-d mailing list