On 4/24/2014 6:35 AM, bearophile wrote:
Currently this code doesn't compile because the lambda allocates the closure on
the heap:
Pointing out these issues is exactly what @nogc is designed to do.
void main() @nogc {
import std.algorithm: map;
int[3] data = [1, 2, 3];
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,
True.
so a good amount of range-based code can't be @nogc.
"Can't" is a bit strong of a word. Needing a workaround that is perhaps a bit
ugly is more accurate. For your example,
enum int x = 3;
will solve the issue.