opDispatch and compile time parameters

Timon Gehr via Digitalmars-d digitalmars-d at puremagic.com
Wed Oct 21 04:40:15 PDT 2015


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.

- ... ?


More information about the Digitalmars-d mailing list