On Saturday, 15 June 2019 at 00:30:43 UTC, Adam D. Ruppe wrote:
On Saturday, 15 June 2019 at 00:24:52 UTC, Emmanuelle wrote:
Is it a compiler bug?

Yup, a very longstanding bug.

You can work around it by wrapping it all in another layer of function which you immediately call (which is fairly common in javascript):

        funcs ~= ((x) => (int i) { nums[x] ~= i; })(x);

Or maybe less confusingly written long form:

        funcs ~= (delegate(x) {
            return (int i) { nums[x] ~= i; };
        })(x);

You write a function that returns your actual function, and immediately calls it with the loop variable, which will explicitly make a copy of it.

Oh, I see. Unfortunate that it's a longstanding compiler bug, but at least the rather awkward workaround will do. Thank you!

Reply via email to