うーむ

とりあえず、std.bindで遊びたくなって、関数のmemo化を実装してみたけどうまくいかない。

private import std.traits;
private import std.bind;
ReturnType!(F) memoize(alias F)(ParameterTypeTuple!(F) a){
	auto t = tuple(a);
	static ReturnType!(F)[typeof(t)] memo;
	if(auto p = t in memo)return *p;
	auto result = F(a);
	memo[t] = result;
	return result;
}
int fib_(int n){
	if(n == 0)return 0;
	if(n == 1)return 1;
	return fib(n-1) + fib(n-2);
}
alias memoize!(fib_) fib;
void main(){
	printf("%d",fib(30));
}

Windows環境だと(linuxしらね)

 Error 42: Symbol Undefined _D3std4bind12__T5TupleTiZ5Tuple8toStringMFZAa

とか出やがる*1
fib_の引数をlongにしたら問題なく通るのを見ると、どうみてもバグ踏んでます。
うーんtemplate使うとこういう謎のリンクエラーがたびたび出るのが嫌だなぁ。

*1:ちなみにstd.bind.dも一緒にコンパイルすると大丈夫