Hi,

My test code:
 
import std.stdio;
void main() {
    void delegate()[] functions;
    foreach (i; 0 .. 5) {
        functions ~= {
            printf("%d\n", i);
        };
    }
    foreach (func; functions) {
        func();
    }
}

output:

$ dmd
DMD64 D Compiler v2.059
... 
$ ./main
5
5
5
5
5

Seems like all delegations shared a stack variable, I think delegation must copy the value into its context.

I can avoid it:

    void delegate() createDelegate(int i) {
        void exec() {
            printf("%d\n", i);
        }
        return &exec;
    }
    foreach (i; 0 .. 5) {
        functions ~= createDelegate(i);
    }

But hope for improve it.


Best regards,

-- Li Jie