How will we fix opEquals?

Don nospam at nospam.com
Thu Feb 10 13:34:57 PST 2011


Steven Schveighoffer wrote:
> On Thu, 10 Feb 2011 15:22:48 -0500, Don <nospam at nospam.com> wrote:
> 
>> 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).
>>
>> Dunno if this would be worth it, though.
> 
> I think then we get back to 
> http://d.puremagic.com/issues/show_bug.cgi?id=3659

No, we don't, because that issue applies to structs, not classes. For 
classes, it has to go in the vtable, so the precise signature must be known.

> Would it be possible to define a construct that says "you can override 
> this function, but you cannot add any new overloads"?  like a @precise 
> or something like that?  Then we can have a real feature to use for 
> things like this.  Sort of like final, but you're not cutting off the 
> virtual function path, just restricting the API to be exactly what you 
> specify.  That way someone cannot accidentally create a non-const 
> opEquals and generate a hidden function exception.  Although, anyone 
> worth his salt will test the opEquals, which dmd forces through 
> .opEquals(const(Object), const(Object)).

For sure that could be done. But again -- does it add much value?


More information about the Digitalmars-d mailing list