Does D allow paradoxical code?
Nick Sabalausky
a at a.a
Thu Mar 25 23:37:43 PDT 2010
"Jerry Quinn" <jlquinn at optonline.net> wrote in message
news:hohgnr$2333$1 at digitalmars.com...
> 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
It's useful in robotics:
void blowUp()
{
mixin(vs);
version(v1) {
const string vs = "version = v2;";
pragma(msg, "yes");
}
else {
const string vs = "version = v1;";
pragma(msg, "no");
}
}
More information about the Digitalmars-d
mailing list