さてと前回書いたtemplateだけじゃ何の役に立つか全然分かりません。
なのでどういう時に使うか書いておきます。


まず一番の利点は、pragma(msg)に出力できることです
残念ながらpragma(msg)は文字列しか出力できません。
なので前回のtoStringによって文字列に変換することによって表示を可能にするわけです。
まぁ口で説明するよりかは実際にコード見せたほうが早いので下に書きます
で、templateと言えばフィボナッチ数列なので、それを表示します
コンパイルするだけだからコンパイルオプションに-cを付けるのを忘れないように


//templateによるフィボナッチ数列計算プログラム
template toString(ulong N){
static if(N < 10)
const char[]toString =
(N!=0)?(N!=1)?(N!=2)?(N!=3)?(N!=4)?
(N!=5)?(N!=6)?(N!=7)?(N!=8)?
"9":"8":"7":"6":"5":
"4":"3":"2":"1":"0";
else
const char[]toString=
.toString!(N/10) ~ .toString!(N%10);
}
template loop(alias F,int i,int to){
/*
要するに
mixin F!(0);mixin F!(1);mixin F!(2);
.......mixin F!(to-1);
と展開する
*/
static if(i < to){
mixin F!(i);
mixin loop!(F,i+1,to);
} }
template fib(int i){
//フィボナッチ数列を計算します
static if(i==0||i==1)const ulong fib=i;
else const ulong fib=.fib!(i-1)+.fib!(i-2);
}
template fib_output(int i){
//フィボナッチ数列の出力
pragma(msg,"fib(",.toString!(i),") = ",
.toString!(fib!(i)));
}
//表示するぜ
mixin loop!(fib_output,0,94);
うわー意味ねー。

追記

ソースコードを読みやすく書き直す。
...もっと普段使うソースを直そうよ俺