On 10/21/2015 12:55 PM, Andrei Alexandrescu wrote:
On 10/19/15 9:49 PM, Jonathan M Davis wrote:
On Monday, 19 October 2015 at 23:37:09 UTC, Timon Gehr wrote:
This is the worst part:
class C{
int[] x=[1,2,3];
}
void main(){
auto mut=new C;
auto imm=new immutable(C);
assert(imm.x[0]==1);
mut.x[0]=2;
assert(imm.x[0]==2);
}
Oooo. Ouch. Yeah, that pushes it from being a good idea to disallow this
in order to avoid bugs to a necessity to disallow it in order to avoid
breaking the type system.
Please file, thanks. -- Andrei
(I've filed it in 2013.
https://issues.dlang.org/show_bug.cgi?id=10376 .)
What should be the expected behaviour?
- Don't allow default initialization with mutable indirections in
aggregates.
- Clone the mutable referenced data for each instance.
- Have different "init" for different mutability.
- ... ?