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.

- ... ?

Reply via email to