Initialising invariant associative array
David Ferenczi
raggae at ferenczi.net
Wed Jun 18 09:55:14 PDT 2008
Gide Nwawudu wrote:
> On Wed, 18 Jun 2008 10:21:05 +0200, David Ferenczi
> <raggae at ferenczi.net> wrote:
>
>>The following code gives the following compilation error:
>>
>>src/test/test.d(13): Error: non-constant expression ["s1":cast(FOO
>>9223372036854775808LU,"s2":cast(FOO)4611686018427387904LU]
>>src/test/test.d(14): Error: non-constant expression [cast(FOO
>>9223372036854775808LU:"s1",cast(FOO)4611686018427387904LU:"s2"]
>>
>>
>>--------------------------8<------------------------------------
>>import std.stdint: uint_fast64_t;
>>
>>class A
>>{
>> typedef uint_fast64_t FOO;
>>
>> static invariant FOO fooValue1 = cast(FOO) 0x8000000000000000LU;
>> static invariant FOO fooValue2 = cast(FOO) 0x4000000000000000LU;
>>
>> static invariant FOO[string] fooArray =
>>["s1":fooValue1, "s2":fooValue2];
>> static invariant string[FOO] strArray = [fooValue1:"s1",
>>fooValue2:"s2"];
>>}
>>
>>int main(string[] args)
>>{
>> A a;
>>
>> return 0;
>>}
>>--------------------------8<------------------------------------
>>
>>Can somebody explain me why?
>>
>>Thanks,
>>David
>
> D uses 'static this' to initialise static members. This is done to
> remove order of evaluation issues. The docs contain more info on
> static constructors, see http://www.digitalmars.com/d/2.0/class.html
> section 'Static Constructors'.
>
> import std.stdint: uint_fast64_t;
>
> class A
> {
> typedef uint_fast64_t FOO;
>
> static invariant FOO fooValue1;
> static invariant FOO fooValue2;
>
> static invariant FOO[string] fooArray;
> static invariant string[FOO] strArray;
>
> static this() {
> fooValue1 = cast(FOO) 0x8000000000000000LU;
> fooValue2 = cast(FOO) 0x4000000000000000LU;
>
> fooArray = ["s1":fooValue1, "s2":fooValue2];
> strArray = [fooValue1:"s1", fooValue2:"s2"];
> }
> }
>
> int main(string[] args)
> {
> A a;
>
> return 0;
> }
>
>
> Gide
Thank you very much for your help. Initialising in the static constructor
works well.
Thanks,
David
More information about the Digitalmars-d-learn
mailing list