http://d.puremagic.com/issues/show_bug.cgi?id=7493
--- Comment #6 from [email protected] 2012-03-21 15:13:28 PDT --- (In reply to comment #5) > (In reply to comment #4) > > DMD is inconsistent here. It is not clear what the behavior should be. > > > > void main(){ > > string[] s1,s2; > > s1=s1~[]; > > s2~=[]; > > writeln(s1," ",s2); // [""] [] > > } > > > > I think most reasonable would be to check the array type for implicit > > conversions first and to consider the element type for implicit conversions > > only after the conversion to the array has failed. > > I don't think that's the same issue, It is very closely related. It is the same kind of issue. > and I don't like that approach for > initialization of void[]. It would mean that > void[][3] a = [ str, str, str]; > void[][2] b = [ str, str, str]; > > means > > a[0] == str > b[0] == [str, str, str] I see. That is a problem. > > I think this particular issue is specific to void[], since it is a recursive > type (an array literal of void[] elements is also of type void[]). > The particular issue is specific to void[]. Possible resolutions could affect the entire language. (for example, this issue came up because of an only roughly related fix) > The most intuitive approaches I would think are: > * void[][ANYTHING] = [ WHATEVER ] is _always_ a whole-array assignment; I think that is the best behavior. Block assignment can still work with []= . > OR > it is _always_ an error. Then how do you initialize it? Element-wise? > The current compiler behaviour, where it is always a block assignment, is less > intuitive but I think defensible. > But allowing it to be one or the other, depending on whether the implicit > conversion succeeds, is horribly unpredictable. > > As far as I can tell, there is no mention at all of block assignment in the > spec! Did I miss it? > The conversion rules for arrays and array literals are almost completely unspecified afaik. Another ambiguous case: import std.stdio; class A{ A[] as; this(){as = [new A(0),new A(0)];} this(int){} alias as this; } void main(){ A a = new A; A[] as1; A[] as2; as1=as1~a; as2~=a; writeln(as1.length," ",as2.length); // 2 2 } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
