もはやDを使っててつっかえるところはほとんどないのだが、最近1点だけひっかかったところがあるのでメモっておく。オブジェクトの配列をforeachで初期化するとき、
Test[5] tests; foreach (Test t; tests) t = new Test;
としてtests[1]とかを触ると、Access Violationになる。これはForeachTypeListで宣言した変数には、集合体の内容が「コピー」されるため。正解は
Test[5] tests; foreach (inout Test t; tests) t = new Test;
です。デフォルトが「参照」でもいいような気がするんだけどなー。なにか意味があるのかしらん。