This is a wrong D2 program: immutable class Foo {} class Bar : Foo { int x; } void main() { auto b = new Bar; b.x = 10; // line 5 } From the error message it's clear that x is not a mutable variable: test.d(5): Error: can only initialize const member x inside constructor But from the code of the Foo class there is no clear indication that x is immutable. So in this situation I think it's better if the compiler requires a immutable annotation on x too, for code readability, something like: immutable class Foo {} class Bar : Foo { int x; } // Error: attribute x requires 'immutable' annotation void main() { auto b = new Bar; } immutable class Foo {} class Bar : Foo { immutable int x; } // OK, no error void main() { auto b = new Bar; }
Here's another situation that produces the same error message: class Foo { int x; immutable void bar() { x = 1; } } Error: can only initialize const member x inside constructor It should probably report something along the lines of "immutable member function cannot modify member variables".
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/dmd/issues/18176 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB