How to break const
Matthias Walter
xammy at xammy.homelinux.net
Sun Jun 17 22:59:47 PDT 2012
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
More information about the Digitalmars-d
mailing list