import std.stdio;
class Foo {
int a;
int opApply(scope int delegate(ref int) dg)const
{
auto r = dg(a); // なんで渡せるの?
if (r) return r;
return 0;
}
}
class Bar {
Foo foo;
this(){ foo = new Foo; }
void hoge() const
{
writeln(foo.a);
// なんでforeachbodyがconstじゃないdelegateで渡せちゃうの?
foreach(ref fuga; foo){
fuga = 1;
}
// なんで書き換えられちゃってるの?
writeln(foo.a);
}
}
void main() {
(new Bar()).hoge();
}
aW1wb3J0IHN0ZC5zdGRpbzsKY2xhc3MgRm9vIHsKICBpbnQgYTsKICBpbnQgb3BBcHBseShzY29wZSBpbnQgZGVsZWdhdGUocmVmIGludCkgZGcpY29uc3QKICB7CiAgICBhdXRvIHIgPSBkZyhhKTsgLy8g44Gq44KT44Gn5rih44Gb44KL44Gu77yfCiAgICBpZiAocikgcmV0dXJuIHI7CiAgICByZXR1cm4gMDsKICB9Cn0KY2xhc3MgQmFyIHsKICBGb28gZm9vOwogIHRoaXMoKXsgZm9vID0gbmV3IEZvbzsgfQogIHZvaWQgaG9nZSgpIGNvbnN0CiAgewogICAgd3JpdGVsbihmb28uYSk7CiAgICAvLyDjgarjgpPjgadmb3JlYWNoYm9keeOBjGNvbnN044GY44KD44Gq44GEZGVsZWdhdGXjgafmuKHjgZvjgaHjgoPjgYbjga7vvJ8KICAgIGZvcmVhY2gocmVmIGZ1Z2E7IGZvbyl7CiAgICAgIGZ1Z2EgPSAxOwogICAgfQogICAgLy8g44Gq44KT44Gn5pu444GN5o+b44GI44KJ44KM44Gh44KD44Gj44Gm44KL44Gu77yfCiAgICB3cml0ZWxuKGZvby5hKTsKICB9Cn0Kdm9pZCBtYWluKCkgewogIChuZXcgQmFyKCkpLmhvZ2UoKTsKfQ==