On Friday, 12 August 2016 at 04:49:46 UTC, Charles Hixson wrote:

It works, it's just not the syntax that I'd prefer. And it leaves me wondering exactly what
immutable class Msg {...}
was declaring.

This should demonstrate:

```
immutable class iMsg {
    int getX() { return 10; }
}

class Msg {
    int getX() { return 20; }
}

void main() {
    auto msg1 = new immutable iMsg;
    assert(msg1.getX() == 10);

    auto msg2 = new immutable Msg;
    assert(msg2.getX() == 20);
}
```

The line with msg2.getX() will fail to compile, because it's calling a non-immutable method on an immutable object. Change the declaration of Msg to the following and it compiles:

```
class Msg {
    int getX() immutable { return 20; }
}
```

immutable class Foo { ... } is the same as declaring every member of Foo as immutable, just as final class Foo { ... } makes every method final.


Reply via email to