C++17

rsw0x via Digitalmars-d digitalmars-d at puremagic.com
Wed Jan 27 00:56:43 PST 2016


On Wednesday, 27 January 2016 at 08:48:20 UTC, Mathias Lang wrote:
> 2016-01-27 8:10 GMT+01:00 rsw0x via Digitalmars-d < 
> digitalmars-d at puremagic.com>:
>
>> [...]
>
>
> For delegate you can use `scope delegate`, which is 
> stack-allocated.
> Using a sink-based approach like `toString` that specific point 
> is quite
> easily solved.
> `scope` safety being unimplemented, it's also quite easy to 
> abuse if you
> don't have control over the function decl:
>
> ```
> import core.stdc.stdio;
> void main () @nogc
> {
>     string foobar = "Value";
>     scope sink = (int u) { printf("%s: %d\n", foobar.ptr, u); };
>     foo(sink);
> }
>
> void foo (void delegate (int) @nogc sink) @nogc
> {
>     sink(42);
> }
> ```
> Alternatively, you can make foo's parameter `scope` and use the 
> literal
> inline, it's recognized by @nogc.

This is not applicable in a scenario where I want to actually 
copy the parameters by value.
It still captures the context, it just allows it to move down the 
stack.


More information about the Digitalmars-d mailing list