On Monday, June 18, 2012 18:51:01 Andrej Mitrovic wrote: > struct Wrap > { > string wrap; > alias wrap this; > } > > void main() > { > Wrap x; > x = "foo"; // ok > Wrap[] y = ["foo", "bar"]; // fail > } > > Error: cannot implicitly convert expression (["foo","bar"]) of type > string[] to Wrap[] > > Any special reason why this doesn't work? I hope it's just a bug or > unfinished implementation.
Generally, the type of the right-hand side of an assignment is determined independently of the left-hand side. So, the type of ["foo", "bar"] would be determined to be string[] before the compiler did anything with the left-hand side. At that point, you'd need to be converting from string[] to Wrap[], which would mean creating a new array, which isn't the sort of thing that happens implicitly. Now, there are a few exceptions. ubyte[] a = [1, 2, 3, 4]; works even though [1, 2, 3, 4] is normally typed as int[], so the compiler does adjust the type of the right-hand side under some circumstances, but it's not the normal thing to do, which is probably why it's not working for you. - Jonathan M Davis