How will we fix opEquals?
Michel Fortin
michel.fortin at michelf.com
Thu Feb 10 14:07:24 PST 2011
On 2011-02-10 15:22:48 -0500, Don <nospam at nospam.com> said:
> Steven Schveighoffer wrote:
>> 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
>
> I fear that you're probably right. The const opEquals must exist,
> otherwise the object will be unable to use most functions in Phobos.
> And I don't see how it can safely be synthesised from non-const opEquals.
>
> A tiny compromise which could be made, is to silently add 'const' to
> any class opEquals declaration, even if not present in the source. That
> way, simple use cases would still compile without complaint.
> (As long as only a single, precisely defined opEquals signature is
> permitted, I think any other signature should be flagged as an error --
> but it could be converted to the correct signature, instead).
I don't like this idea at all. If the problem is that it's too easy to
hide the underlying function without noticing (no compile-time error),
then fix how the language treats hidden functions (make it a
compile-time error). If opEquals has this problem, other
non-language-defined functions will have it too, and fixing it with a
special case for opEquals will not fix it elsewhere. Not to speak of
the inconsistency it adds.
--
Michel Fortin
michel.fortin at michelf.com
http://michelf.com/
More information about the Digitalmars-d
mailing list