How to break const

Timon Gehr timon.gehr at gmx.ch
Mon Jun 18 08:21:35 PDT 2012


On 06/18/2012 05:15 PM, Mehrdad wrote:
> On Monday, 18 June 2012 at 15:11:00 UTC, Timon Gehr wrote:
>> On 06/18/2012 04:55 PM, Mehrdad wrote:
>>>
>>> Identical calls giving identical results? What?
>>>
>>>
>>> import std.stdio;
>>> struct S
>>> {
>>>          this(int a)
>>>          {
>>>                  this.a = a;
>>>                  this.increment = { return this.a++; };
>>>          }
>>>          int a;
>>>          int delegate() pure increment;
>>>          auto oops() const { return this.increment(); }
>>> }
>>> void main()
>>> {
>>>          auto c = immutable(S)(0);
>>>          writeln(c.oops()); // 0
>>>          writeln(c.oops()); // 1
>>>          writeln(c.oops()); // 2
>>>          writeln(c.oops()); // 3
>>>          writeln(c.oops()); // 4
>>>          writeln(c.oops()); // 5
>>> }
>>
>> Now you have managed to break the type system.
>> The underlying issue is unrelated to delegates though.
>
>
>
> Yeah, I didn't mean to say it's a delegate issue either. That's why the
> title was saying "how to break _const_".  Delegates were just a means to
> an end. :)
>
>
> So (**IMHO**) if that's really the case, we should really spend some
> time fixing the /design/ of const before the implementation...

This is mostly about the design of object initialisation.

> good idea or no?

Certainly.


More information about the Digitalmars-d mailing list