次のコードを検討してください。
immutable struct Test {
this(int foo) { }
int opApply(int delegate(ref int) dg) {
return (0);
}
}
int main(string[] argv) {
auto set = Test(); // compiles
// auto set = Test(1); // Error: cannot uniquely infer foreach argument types
foreach (item; set) { }
return 0;
}
デフォルトの引数のないコンストラクターを使用しTest
て構造体を構築すると、コードは正常にコンパイルされますが、他のコンストラクターを使用しようとすると、コンパイル時エラーが発生します。をコメントアウトするforeach
と、コードがコンパイルされます。をコメントアウトするimmutable
と、コードもコンパイルされます。
この種の動作の理由は何ですか?また、どのように修正する必要がありますか?