| /* |
| https://issues.dlang.org/show_bug.cgi?id=21518 |
| TEST_OUTPUT: |
| --- |
| fail_compilation/test21518.d(19): Error: cannot implicitly convert expression `[dg]` of type `const(void delegate() pure nothrow @nogc @system)[]` to `void delegate() @safe[]` |
| fail_compilation/test21518.d(23): Error: cannot implicitly convert expression `[dg]` of type `const(void delegate() pure nothrow @nogc @system)[]` to `const(void delegate() @safe)[]` |
| fail_compilation/test21518.d(28): Error: cannot implicitly convert expression `sysA` of type `const(void delegate() @system)[]` to `const(void delegate() @safe)[]` |
| fail_compilation/test21518.d(31): Error: cannot implicitly convert expression `sysA` of type `const(void delegate() @system)[]` to `const(void delegate() @safe)` |
| fail_compilation/test21518.d(32): Error: cannot implicitly convert expression `dg` of type `const(void delegate() pure nothrow @nogc @system)` to `const(void delegate() @safe)` |
| --- |
| */ |
| |
| void delegates() |
| { |
| const dg = delegate() @system { int* p; int x; p = &x; }; |
| // pragma(msg, typeof(dg)); // const(void delegate() pure nothrow @nogc @system) |
| |
| // Correctly fails |
| void delegate() @safe[] arg2 = [ dg ]; |
| void delegate() @system[] arg3 = [ dg ]; // But doesnt break this |
| |
| // Previously ignored |
| const(void delegate() @safe)[] arg = [ dg ]; |
| // pragma(msg, typeof(arg)); // const(void delegate() @safe)[] |
| |
| // Also for variables, not only array literals |
| const(void delegate() @system)[] sysA = [ dg ]; |
| const(void delegate() @safe)[] safeA = sysA; |
| |
| // Original bug report: |
| func(sysA); |
| func(dg); |
| } |
| |
| void func(const void delegate() @safe [] paramDGs...) @safe |
| { |
| if (paramDGs.length > 0) paramDGs[0](); |
| } |