On Wednesday, 1 July 2015 at 21:15:13 UTC, Marc Schütz wrote:
On Wednesday, 1 July 2015 at 19:09:36 UTC, Alex Parrill wrote:
I don't think this is a bug.
Since you don't initialize `c` to anything, it defaults to an
empty slice. Array [] operations apply to each element of a
slice, but `c` doesn't have any elements, so it does nothing.
I _do_ think it's a bug. Compare:
import std.stdio;
void main() {
int[] a = [1,1,1,1];
int[] b = [1,1,1,1];
int[] c;
int[2] d;
c[] = a[] - b[]; // works
c.writeln; // []
d[] = a[] - b[]; // works
d.writeln; // [0, 0]
d[] = a[]; // throws!
// object.Error@(0): Array lengths don't match for
copy: 4 != 2
}
So, in the case of subtraction, it assigns only as many
elements as the destination has, but for direct assignment, it
throws an error. This is clearly inconsistent.
Bug. "c[] = a[] <op> b[]" produces "[]" for operators "-" and
"/", but "object.Error@(0): Array lengths don't match for vector
operation: 0 != 4" for operators "+" and "*". Wat.
Oh, and to make things really confusing, "auto e = a[] - b[]" and
"int[] e = a[] - b[]" both cause "Error: array operation a[] -
b[] without destination memory not allowed".
Using dmd 2.067.0.