import std.c.stdio;
class Test{
this(int value){this.value = value;}
int value;
}
void main(){
void delegate()[] funcs;
Test[] tests;
tests ~= new Test(0);
tests ~= new Test(1);
tests ~= new Test(2);
foreach(test;tests){
void delegate() bind(Test x){
return delegate void(){printf("test.value = %d\n",x.value);};
}
funcs ~= bind(test);
}
foreach(func;funcs){
func();
}
}
aW1wb3J0IHN0ZC5jLnN0ZGlvOwoKY2xhc3MgVGVzdHsKICB0aGlzKGludCB2YWx1ZSl7dGhpcy52YWx1ZSA9IHZhbHVlO30KICBpbnQgdmFsdWU7Cn0Kdm9pZCBtYWluKCl7CiAgdm9pZCBkZWxlZ2F0ZSgpW10gZnVuY3M7CiAgVGVzdFtdIHRlc3RzOwogIHRlc3RzIH49IG5ldyBUZXN0KDApOwogIHRlc3RzIH49IG5ldyBUZXN0KDEpOwogIHRlc3RzIH49IG5ldyBUZXN0KDIpOwogIGZvcmVhY2godGVzdDt0ZXN0cyl7CiAgICB2b2lkIGRlbGVnYXRlKCkgYmluZChUZXN0IHgpewogICAgICByZXR1cm4gZGVsZWdhdGUgdm9pZCgpe3ByaW50ZigidGVzdC52YWx1ZSA9ICVkXG4iLHgudmFsdWUpO307CiAgICB9CiAgICBmdW5jcyB+PSBiaW5kKHRlc3QpOwogIH0gICAgCiAgZm9yZWFjaChmdW5jO2Z1bmNzKXsKICAgIGZ1bmMoKTsKICB9ICAgIAp9