[Issue 1594] version not honored for invarient declaration
Bill Baxter
dnewsgroup at billbaxter.com
Fri Oct 19 12:26:33 PDT 2007
John Mandeville wrote:
> d-bugmail at puremagic.com Wrote:
>
>> I know its not intuitive but the compiler is behaving correctly. All the code
>> inside a version block must be valid code for the compiler you are using.
>>
>> Here is how you need to do what you want to achieve...
>>
>> version(D_Version2)
>> {
>> string str = "Version 2";
>> mixin("invariant int myint = 2;");
>> }
>>
>> else
>> {
>> string str = "Version 1";
>> const int myint = 1;
>> }
>
> Hmmmm. The following would also work:
>
> version (D_Version2)
> {
> mixin( "alias invariant int invarInt;" );
> invarInt myint = 2;
> }
>
> Unfortunately, this does not work:
>
> version (D_Version2)
> {
> mixin( "alias invariant int invarInt;" );
> }
> else
> {
> alias const int invarInt;
> }
>
> Neither v.1 nor v. 2 likes alias of const. (I can't figure out why neither likes alias of const but v. 2 likes alias of invariant. const is a storage class, not a type modifier; but then, I presume, the same is true for invariant in v. 2.)
>
> Could an invariant storage class be added to version 1 that is just equivalent 10 const? We obviously don't want to add a new storage class semantics to version 1--changes to v. 1 at this point should be limited essentially to bug fixes. However, using the word invariant with const semantics might be a small enough change to be a worthwhile. It would be a convenience to those trying to develop for version 1 and version 2 sinultaneously.
>
And make the type constructor flavors no ops in v1 (invariant(char)[]
--> char[]), and make .idup synonymous with .dup. These things would go
a long way to making it easier to support both v1 and v2 of D I think.
More information about the Digitalmars-d-bugs
mailing list