On Sunday, 24 May 2015 at 18:14:19 UTC, anonymous wrote:

"Static array" has a special meaning. It does not mean "static variable with an array type". Static arrays are those of the form Type[size]. That is, the size is known statically.

Examples:

1) static int[5] x; -- x is a static variable with a static array type
2) static int[] x; -- static variable, dynamic array
3) int[5] x; -- non-static variable, static array
4) int[] x; -- non-static variable, dynamic array

So, CTFE can't handle examples 1 and 2, because they're static variables. 3 and 4 are fine.

From your description, I would expect this to fail since I would expect it to be included in 2 above, but it builds and prints ok.

import std.stdio;

struct A {  int me;   int next;   int prev;}

A[] initA(int n)
{
        if (!__ctfe){
                assert(false);
        }
        A[] v = new A[n];
        foreach (i; 0..n){
                v[i].me = i;
                v[i].prev = i-1;
                v[i].next = i+1;
        }
        return v;
}

int main(string[] argv)
{

        enum int N = 100;
        static A[] linkedA = initA(N);

        writefln("%s",linkedA);

        return 0;

}


Reply via email to