D_Version2 problem
Robert Fraser
fraserofthenight at gmail.com
Thu Jun 11 04:52:21 PDT 2009
David Ferenczi wrote:
> == Quote from Sergey Gromov (snake.scaly at gmail.com)'s article
>> Sun, 18 Jan 2009 22:28:12 +0100, Hoenir wrote:
>>> The D_Version2 version identifier doesn't work properly for me.
>>> Tried compiling with dmd 1.039. D_Version2 is set even if I pass -v1 to it.
>>>
>>> Is this a bug or am I doing something wrong?
>> Works for me.
>> It's hard to tell if you're doing something wrong until you post your
>> test code.
>> ----8<------ test.d
>> version(D_Version2)
>> {
>> pragma(msg, "v2");
>> }
>> else
>> {
>> pragma(msg, "v1");
>> }
>> ----8<------
>>> dmd -c test.d
>> v1
>
> The behaviour is a bit ambigous, since in compile time every version block gets interpreted!
> So you cannot put D2 only code in the version(D_Version2) {} block, if you want to compile
> your source with D1.
>
> I don't know if it's a bug or a feature.
>
> Regards,
> David
This has been discussed many times over. It's a "feature" according to
Walter, and there's some sense to it (since D code is supposed to be
parseable without doing semantic analysis, and versions can require
arbitrary ammounts of semantic analysis (like CTFE) to determine). If
you want to have D2 code you need to use a mixin:
version(D_Version2) {
mixin("const(char)[] x;");
} else {
char[] x;
}
Note that the -v1 switch reverts to the (rather arbitrary) D version
1.00, while new D features were being added through (I think) 1.014.
More information about the Digitalmars-d-learn
mailing list