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