spec:
Although, yeah, it would be nice if the compiler emitted some
kind of warning pointing this (if it's at all possible). What
got me confused was indeed the disparity of results from
changing small things.
D doesn't like warnings, but it could be an error. This is
minimized code:
struct Foo {
static this() {
Bar b;
int x = b.data[0];
}
}
struct Bar {
static int[] data;
static this() {
data.length++;
}
}
void main() {}
A similar example:
struct Foo {
static this() {
Bar b;
int x = b.data[0];
}
}
struct Bar {
immutable static int[] data;
static this() {
data.length++;
}
}
void main() {}
Is it possible and a good idea to raise a compilation error in
such cases where code tries to use Bar static fields before bar
static this() has run? (But perhaps a more fine-grained error is
needed, that tracks single fields, to allow more flexible code of
mutually initializing constructors).
Bye,
bearophile