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;
}