Daniel wrote:
int delegate()[] funcs;
funcs.length = 3;

foreach(i, ref f; funcs)
{
  f = int() { return i; }
}

foreach(f; funcs)
{
  writeln(f());
}

First, there are syntax errors in your example.  It should be

    f = delegate int() { return i; };

Second, this works in D2:

    foreach(i, ref f; funcs)
    {
      void blah() {
        auto j = i;
        f = delegate int() { return j; };
      }
      blah();
    }

But this doesn't, outputs 2, 2, 2:

    foreach(i, ref f; funcs)
    {
      auto j = i;
      f = delegate int() { return j; };
    }

And this crashes:

    foreach(i, ref f; funcs)
    {
      ({
        auto j = i;
        f = delegate int() { return j; };
      })();
    }

I think these 3 variants should be equivalent.

Reply via email to