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

Reply via email to