digitalmars.D.bugs - [Issue 21521] New: Cannot state ref return for delegates and
- d-bugmail puremagic.com (33/33) Jan 02 2021 https://issues.dlang.org/show_bug.cgi?id=21521
https://issues.dlang.org/show_bug.cgi?id=21521 Issue ID: 21521 Summary: Cannot state ref return for delegates and function pointers Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: major Priority: P1 Component: dmd Assignee: nobody puremagic.com Reporter: qs.il.paperinik gmail.com Currently, the grammar does not allow `ref` to occur in the rhs of IsExpression and parameter types. There is no way to express that a function requires its function pointer/delegate parameter to return by reference without using a helper alias: void f(ref int delegate() dg) { static assert(!__traits(isRef, dg)); // fails, dg is ref, not its return } void f(int delegate() ref dg) // invalid syntax: found `ref` when expecting { } Same for testing whether DG is a fp or delegate returning by ref: is(DG : ref int delegate()) // invalid syntax is(DG : int delegate() ref) // invalid syntax Workaround: alias RefFunctionPointer(T, Args...) = ref T function(Args); alias RefDelegate(T, Args...) = ref T delegate(Args); The workaround has severe limitations such as attributes and parameter storage classes. --
Jan 02 2021