On Sunday 30 August 2015 12:21, rsw0x wrote:

> import std.algorithm, std.range;
> 
> auto foo(R)(R a, immutable int b)
> {
>      return a.map!(x => x + b);
> }
> 
> @nogc @safe unittest
> {
>      int[3] test = [1,2,3];
> 
>      assert(test[].foo(3).equal(only(4,5,6)));
> }
> 
> does this count?

I think this shouldn't compile and it only does so because of issue 14771.

https://issues.dlang.org/show_bug.cgi?id=14771

The delegate in foo uses a local variable and it's returned from the 
function, so it needs a closure. Where does the closure go if not on the GC 
heap?

See also this Learn thread about how to call map with a delegate in a @nogc 
function:

http://forum.dlang.org/post/[email protected]

Ali Çehreli's solution there may or may not actually be @nogc, but I'm 
afraid it relies on issue 14771 any way:

http://forum.dlang.org/post/[email protected]

Reply via email to