値パラメタを取る関数テンプレートの型
引数がコンパイル時定数なら関数ポインタ、そうでないならデリゲートになります。
void hoge(int i)(){ writefln(i); } void main(){ int x = 0; writefln(typeid(typeof(&(hoge!(x))))); // void delegate() writefln(typeid(typeof(&(hoge!(4))))); // void()* }
しかもデリゲートの方はちゃんと実体化してくれません…コンパイル時定数じゃないんだから当然と言えば当然なんですが。
void hoge(int i)(){ writefln(i); } void main(){ int x = 5; auto f = &(hoge!(x)); auto f_ = &(hoge!(5)); f(); // 0 f_(); // 5 }
この辺の事情はテンプレート内の変数なんかも同じです。
まあ値パラメタにコンパイル時定数以外の値渡す時点で色々間違いなので仕方ありません。