​dip1000​​隐式去​​闭包​​属性失败.

struct A {
void method() pure @safe nothrow @nogc { }
}

void test(scope void delegate() del) @safe { }

void main() @safe {
A a;

// OK:
void delegate() del = &a.method;

test(&a.method);
}

用​​-preview=dip1000​​​编译时失败,会打断​​一些​​函数实现.


如下会工作:

struct A {
int* p;
void method() scope pure @safe nothrow @nogc { }
}

void test(scope void delegate() del) @safe { }

void main() @safe {
A a;
test(&a.method);
}

注意

1,给​​方法​​加​​域​​,表明方法不会逃逸​​this.p​​.

2,​​int* p;​​,否则,会忽略掉加的​​域​​.

可能修复方法是,如果字段都无​​间接​​,则隐式给​​方法​​加​​域​​标记.