What should happen when the following code is compiled?
mixin(vs);
version(v1) {
const string vs = "version = v2;";
pragma(msg, "yes");
}
else {
const string vs = "version = v1;";
pragma(msg, "no");
}
Currently, there's an error saying that vs must be a string. However, as far
as I can tell, the spec says nothing about order affecting module-scope
declarations. So vs should be valid, and once it substitutes in the mixin, you
have a cycle where no matter what vs is, vs should be the other value.
If you don't have the conditional compilation and put the declaration of vs
after the mixin, it works as expected.
This generally raises the question of what should be the order of evaluation
for constructs like mixins, conditional compilation, and CTFE. Each has the
potential to modify the other.
What should be the rule to break the ambiguity? Or do we leave it
implementation-defined?
Thoughts?
Jerry