On Fri, 25 Apr 2014 07:28:27 -0400, Ola Fosheim Grøstad
<[email protected]> wrote:
On Thursday, 24 April 2014 at 13:35:39 UTC, bearophile wrote:
immutable int x = 3;
auto result = data[].map!(y => y * x);
}
test.d(1,6): Error: function D main @nogc function allocates a closure
with the GC
Such kind of code is common, so a good amount of range-based code can't
be @nogc.
Why can't this be on the stack if the referenced local function (lambda)
does not outlive the stack frame?
It could. I don't think the compiler is smart enough, as it would need to
verify result doesn't go anywhere (flow analysis).
I wonder if LDC/GDC could do it.
One interesting thing about this is that the compiler implementation may
make some @nogc code valid on some compilers, and invalid on others, even
though the resulting execution is the same.
-Steve