Delegates and values captured inside loops

Anonymouse zorael at gmail.com
Sat Jan 20 15:59:59 UTC 2024


I remember reading this was an issue and now I ran into it myself.

```d
import std.stdio;

void main()
{
     auto names = [ "foo", "bar", "baz" ];
     void delegate()[] dgs;

     foreach (name; names)
     {
         dgs ~= () => writeln(name);
     }

     foreach (dg; dgs)
     {
         dg();
     }
}
```

Expected output: `foo`, `bar`, `baz`
Actual output:   `baz`, `baz`, `baz`

If I make `names` an `AliasSeq` it works, but I need it to be a 
runtime array.

Is there a workaround?


More information about the Digitalmars-d-learn mailing list