[Issue 20091] New: nogc callback inferred as non-nogc

d-bugmail at puremagic.com d-bugmail at puremagic.com
Mon Jul 29 22:32:23 UTC 2019


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

          Issue ID: 20091
           Summary: nogc callback inferred as non-nogc
           Product: D
           Version: D2
          Hardware: x86
                OS: Mac OS X
            Status: NEW
          Severity: enhancement
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: ali.akhtarzada at gmail.com

import std;

struct W(T) {
    T value;
    auto hook(handlers...)() {
        return handlers[0](value);
    }
}

template f(handlers...) {
    auto ref f(T)(auto ref T value) {
        return value.hook!handlers;
    }
}

@nogc void main() {
    auto a = W!int(3);
    auto b = a.f!((_) => "yes");
}

Produces: Error: @nogc function D main cannot call non- at nogc function
onlineapp.main.f!(W!int).f

Adding @nogc on function f says hook!((_) => "yes").hook closes over variable
__this310

If you explicitly specify a type on the lambda that you pass to f then it
compiles:

auto b = a.f!((int) => "yes");

--


More information about the Digitalmars-d-bugs mailing list