Why are opEquals/opCmp arguments not in or const for Objects?

deadalnix deadalnix at gmail.com
Thu Mar 21 00:29:28 PDT 2013


On Wednesday, 20 March 2013 at 04:39:14 UTC, Jonathan M Davis 
wrote:
> On Tuesday, March 19, 2013 20:51:28 Stewart Gordon wrote:
>> But the question still remains: How do we implement this 
>> change without
>> causing mass disruption?  It might be the case that 
>> programmers just
>> need to remove opEquals(Object) and opCmp(Object) from their 
>> classes,
>> and remove the override attribute from toHash and toString 
>> (and declare
>> them const as appropriate).  But there will be a lot of 
>> libraries to
>> convert, and it will take time for them all to be converted.
>
> I expect that we'll figure out how to do that when we're ready 
> to actually
> start the transition process, but the obvious thing to do to 
> start with would
> be to deprecate opEquals, opCmp, toHash, and toString on 
> Object, which should
> then cause a number of deprecation warnings. That likely 
> wouldn't be enough,
> but it would be a start. Additional compiler warnings would 
> probably need to
> be added at some point, and eventually those functions would be 
> outright
> removed. But regardless of how it's approached, it's obviously 
> going to
> require changing existing code, and it's going to be 
> disruptive. We can't
> avoid that, just mitigate it. But it _is_ a change that we're 
> going to need to
> make in order to solve some of the problems surrounding 
> opEquals et al and
> const. The main issue at this point is gettnig the work 
> necessary to be able
> to make the transition done (and since that includes changes to 
> the AA
> implementation, it's far from a small undertaking).
>
> - Jonathan M Davis

Wouldn't that trigger bunch of false warning on legitimate 
overloaded opSomething ?


More information about the Digitalmars-d mailing list