Congratulations to the D Team!

Roman D. Boiko rb at d-coding.com
Wed Jul 11 11:30:26 PDT 2012


On Wednesday, 11 July 2012 at 18:21:24 UTC, Steven Schveighoffer 
wrote:
...
> It also seems to allow abuses.  For example:
>
> class A
> {
>    private int _x;
>    public @property x() const { return _x; }
> }
>
> class B : A
> {
>    private int _x2;
>    public @property x() { return _x2++; }
> }
>
> Now I've completely changed the logistics of the x property so 
> that it's essentially become mutable.  In effect, I overrode 
> the const piece of x completely to make it non-const without a 
> cast, and anyone calling x() on an A instance cannot trust that 
> it won't increment the effective value of x().
>
> I think the solution to this overall problem is simply to make 
> object.opEquals use the most derived types available for 
> comparison.
>
> -Steve

I thought about this example. You can have a const method 
returning different values anyway (instead of returning what base 
class' method would return), and A._x has not been mutated. From 
my point of view, it is just a different concept, but arguably 
not a worse one.



More information about the Digitalmars-d mailing list