On Wednesday, 30 October 2013 at 09:20:40 UTC, Lionello Lunesu wrote:
Why? It's a struct. It should be completely fine to create a copy [on the heap] for the closure context

That's definitely not how D closures work, they always refer to local variables "by reference".

One other place where this tends to crop is for code involving loop variables, but while the behavior might be unexpected to some, discussion has made clear that the code works as intended:

---
void main() {
  import std.stdio;

  void delegate()[] dgs;
  foreach (i; 0 .. 5) dgs ~= { writeln(i); };

  foreach (dg; dgs) dg();
}
---

If structs behaved like you want them to, the snippet would (have to) print 0, 1, 2, 3, 4 as well, and tht's definitely too big a language change to consider at this stage.

David

Reply via email to