The following code bypasses immutabililty with GDC but not DMD

Manu turkeyman at gmail.com
Thu Apr 11 19:35:41 PDT 2013


This is an interesting problem with the ref-is-not-part-of-the-type design.
You can't really have a const(ref) in D, and a ref const(int) is kinda
backwards logic.
I've never understood why ref isn't part of the type... can someone explain
why this is a good thing? It seems to cause all sorts of troublesome
problems... auto ref in templates for one.


On 12 April 2013 10:50, Nicholas Smith <nmsmith65 at gmail.com> wrote:

> I don't know how to file bug reports but I'm sure this shouldn't happen :)
> DMD gives an error.
>
> import std.stdio;
>
> void main()
> {
>         immutable Cat cat = cast(immutable) new Cat(5);
>         happyBirthday(cat.age);
>         writefln("My 5 year old cat is %s years old!", cat.age);
> }
>
> void happyBirthday(ref int i)
> {
>         i++;
> }
>
> class Cat
> {
>         public int age;
>
>         this(int a)
>         {
>                 this.age = age;
>         }
> }
>
>
> Output:
> My 5 year old cat is 6 years old!
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/d.gnu/attachments/20130412/52eacfe3/attachment.html>


More information about the D.gnu mailing list