いくつかの制約の下, 関数をコンパイル時に実行することができる.
この関数はテンプレート関数である必要がない.
ctef.d
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import std.stdio;
uint factorial(uint i){
if(i == 0)
return 1;
else
return i * factorial(i-1);
}
void main(){
int[factorial(4)] v;
/*
コンパイル時定数が必要な場所で関数が実行されているとコンパイル時に実行される.
*/
v[0] = 0;
v[23] = 23;
writeln(v.length);
writeln(v[0], " --> ", v[23]);
}
|
ctef.d の実行結果は:
[cactus:~/code_d/d_tuts]% ./ctef
120
0 --> 23