https://issues.dlang.org/show_bug.cgi?id=15582
Marc Schütz <schue...@gmx.net> changed: What |Removed |Added ---------------------------------------------------------------------------- Severity|normal |enhancement --- Comment #6 from Marc Schütz <schue...@gmx.net> --- @H. S. Teoh: You're right that opSlice() should actually be opIndex(), but this has nothing to do with the problem (I guess we both agree on that). I may indeed be misunderstanding things. Let me comment on some of your points, maybe my stance becomes clearer. > Secondly, in opSlice()'s implementation, the notation `data[]` means "take a > slice of the static array `data`", IOW, "make a dynamic array that points to > the elements of the static data `data`". Right. To clarify, since this may be a cause of confusion, what I mean by "slice" is exactly a "dynamic array". > So what you end up with, is that the LHS of the assignment is a dynamic array, > and you're trying to assign the scalar 10 to it. This is, of course, invalid. This is where I used to disagree. In my understanding, the language should behave as if dynamic arrays `T[]` had an operator `T opAssign(T value)` that does element-wise assignment. Now, looking at [1], the documentation indeed describes the expected behaviour in terms of a "slice operator", thus supporting your point of view. > If the line marked "array copying notation" is really the same thing as > slicing, then the line "x = y" ought to overwrite the first two elements of a > with the last two elements of b. I'm aware of this. But in `x = y`, `x` is an lvalue, see my comment #4. But in light of what the specification says, the current behaviour is indeed consistent. It seems that my mental model was indeed different. I still think that the current behaviour is suboptimal, but it's certainly not a bug then. I'm turning this into an enhancement request; people can close it if it isn't useful. [1] http://dlang.org/spec/arrays.html#array-setting --