November 29, 2023 [Issue 24265] New: ref delegate no longer implicitly converts to unannotated type | ||||
---|---|---|---|---|
| ||||
https://issues.dlang.org/show_bug.cgi?id=24265 Issue ID: 24265 Summary: ref delegate no longer implicitly converts to unannotated type Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: regression Priority: P3 Component: dmd Assignee: nobody@puremagic.com Reporter: destructionator@gmail.com This worked fine on dmd 2.098 (my mainline LTS version) but ceased working some time between that and 2.105 (I don't feel like doing a bisect tonight): ``` void main() { ref int alol(); typeof(&alol) dg; int a; dg = delegate ref() { return a; }; dg() = 5; assert(a == 5); } ``` me@arsd:~/test$ dmd-2098 refdg me@arsd:~/test$ ./refdg # compiles and passes assert me@arsd:~/test$ dmd-master refdg refdg.d(5): Error: cannot implicitly convert expression `__dgliteral4` of type int delegate() pure nothrow @nogc ref @safe` to `int delegate() ref` refdg.d(5): Error: cannot implicitly convert expression `__dgliteral4` of type int delegate() pure nothrow @nogc ref @safe` to `int delegate() ref` Fails on the new dmd. If you write out all the attributes on the dg type: ``` void main() { ref int alol() @safe @nogc nothrow pure; typeof(&alol) dg; int a; dg = delegate ref() { return a; }; dg() = 5; assert(a == 5); } ``` Compiles and runs successfully on both old and new dmd. -- |
Copyright © 1999-2021 by the D Language Foundation