| // REQUIRED_ARGS: -unittest |
| // PERMUTE_ARGS: -preview=dip1000 |
| // Issue 21285 - Delegate covariance broken between 2.092 and 2.094 (git master). |
| unittest |
| { |
| string path; |
| int bank; |
| static string path2; |
| static int bank2; |
| |
| // delegates |
| auto a = [ |
| (string arg) { path = arg; }, |
| (string arg) { bank = 1; throw new Exception(""); } |
| ]; |
| |
| // functions |
| auto ab = [ |
| (string arg) { path2 = arg; }, |
| (string arg) { bank2 = 1; throw new Exception(""); } |
| ]; |
| |
| alias dg = void delegate(string) pure @safe; |
| alias fn = void function(string) @safe; |
| |
| static assert(is(typeof(a[0]) == dg)); |
| static assert(is(typeof(ab[0]) == fn)); |
| } |
| |
| int f(string s) { throw new Exception(""); } |
| void main() |
| { |
| string path; |
| int bank, preset; |
| void delegate(string value)[string] aa = [ |
| "path": (string arg) { |
| path = arg; |
| }, |
| "bank": (string arg) { |
| bank = f(arg); |
| }, |
| "preset": (string arg) { |
| preset = f(arg); |
| }, |
| ]; |
| |
| string delegate(string value)[string] aa2 = [ |
| "path": (string arg) { |
| path = arg; |
| return arg; |
| }, |
| "bank": (string arg) { |
| bank = f(arg); |
| return arg; |
| }, |
| "preset": (string arg) { |
| preset = f(arg); |
| return arg; |
| }, |
| ]; |
| } |