On Wednesday, 29 November 2017 at 10:55:35 UTC, user1234 wrote:
On Wednesday, 29 November 2017 at 06:18:09 UTC, Fra Mecca wrote:
[...]
You must also use a type constructor later, when a
Configuration is declared:
```
immutable(Configuration) config;
config.toString.writeln; // okay this time
```
What happens is that all the member functions have the
`immutable` attribute, but the instance you declared was not
itself `immutable`.
actually this:
```
immutable struct Configuration {
@property string toString(){return "";}
}
```
is like:
```
struct Configuration {
@property string toString() immutable {return "";}
}
```
I would personally prefer the second form. Why ? Because the
variable members will be set immutable anyway when an instance
is declared.
And about the DMD vs LDC thing, i thing that the difference can
be simply explained by the fact that LDC uses a slightly older
compiler front end version, meaning that after 1 or 2 updates,
the same error would happen.
Now i don't know which change in particular has been made
recently in the front-end. Maybe the semantic of the leading
qualifier when "immutable struct {}" is used but i would bet too
much on that.