On Monday, 20 August 2018 at 09:16:18 UTC, ikod wrote:
On Thursday, 16 August 2018 at 16:20:09 UTC, aliak wrote:
On Thursday, 16 August 2018 at 12:25:14 UTC, aliak wrote:
It's also @nogc and @safe

No it's not. Not dispatching at least. Dunno why though. Seems safey is because taking an address. Nogc will have to look in to.

Hello!

please, help, how can I use match in @nogc code:

import optional;

void main() @nogc {
    Optional!int i = 1;
    bool b = true;
    i.match!(
        (v) => b,
        () => false
    );
}

fails to compile:
source/app.d(3,6): Error: function `D main` is @nogc yet allocates closures with the GC source/app.d(7,9): app.main.__lambda1 closes over variable b at source/app.d(5,10)

Thanks!

Hi, it's because the lambda "(v) => b" allocates. Same would happen with any other function that takes an alias to a lambda and that lambda causes a closure allocation.

Changing this to "(int v) => b" seems to make the compiler infer @nogc though and it compiles.

But it's still a delegate, so I'm not sure why that works and not sure in which situations D infers a nogc delegate.

The same thing does not work for algorithm.map for e.g.

Cheers
- Ali


Reply via email to