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.


Reply via email to