How to break const
Mehrdad
wfunction at hotmail.com
Sun Jun 17 23:08:38 PDT 2012
On Monday, 18 June 2012 at 06:00:11 UTC, Matthias Walter wrote:
> On 06/18/2012 07:36 AM, Mehrdad wrote:
>> Is it just me, or did I subvert the type system here?
>>
>>
>> import std.stdio;
>>
>> struct Const
>> {
>> this(void delegate() increment)
>> { this.increment = increment; }
>> int a;
>> void delegate() increment;
>> void oops() const { this.increment(); }
>> }
>>
>> void main()
>> {
>> Const c;
>> c = Const({ c.a++; });
>> writeln(c.a);
>> c.oops();
>> writeln(c.a);
>> }
>>
>
> I don't think so. When calling oops you have two references to
> the object c:
>
> - The this-pointer of the object itself which is not allowed to
> change
> the object in the const-call.
> - The reference from within main which is allowed to change it
> and can
> be reached via the frame pointer of the delegate.
>
> I see this as perfectly valid code. Of course, opinions may
> differ here.
>
> Matthias
My trouble isn't with the delegate, it's with the const method.
It's with the idea that "you can tell something about the code
just by looking at it".
The way I understood it, you can assume that a `const` method
cannot modify an object, but... that doesn't seem to be the case
here.
What am I misunderstanding?
More information about the Digitalmars-d
mailing list