On Tue, Jun 30, 2020 at 04:22:57PM +0000, JN via Digitalmars-d-learn wrote: > Spent some time debugging because I didn't notice it at first, > essentially something like this: > > int[3] foo = [1, 2, 3]; > foo = 5; > writeln(foo); // 5, 5, 5 > > Why does such code compile? I don't think this should be permitted, > because it's easy to make a mistake (when you wanted foo[index] but > forgot the []). If someone wants to assign a value to every element > they could do foo[] = 5; instead which is explicit.
File a bug? I suspect that one potential reason is that nasty misfeature of static arrays implicitly converting to a slice of itself, so `foo = 5;` is in some sense being translated as `foo[] = 5;`. (And on that note, this implicit static -> dynamic array conversion is seriously a nasty misfeature that ought to be killed with fire. It leads to bugs like this: struct Database { int[] data; void set(int[] _data) { data = _data; } } void myFunc(ref Database db) { int[3] x; db.set(x); // oops } ) T -- Once the bikeshed is up for painting, the rainbow won't suffice. -- Andrei Alexandrescu