On 09/21/2014 11:53 AM, Rainer Schuetze wrote:
It also references the issue why this has been changed pretty recently: https://issues.dlang.org/show_bug.cgi?id=11257 I'm on the fence whether this is convenient or makes it too easy to break const "guarantees". It seems strange that you can modify a const-reference only after you make a copy of the "pointer". ATM I'd prefer seeing an explicite cast for that.
This change is unsound. import std.variant; void foo(const(Algebraic!(int*,const(int)*)) x)@safe{ Algebraic!(int*,const(int)*) y=x; *y.get!(int*)()=2; } void main()@safe{ auto x=Algebraic!(int*,const(int)*)(new int); assert(*x.get!(int*)()==0); // pass foo(x); // passed as const, so shouldn't change assert(*x.get!(int*)()==2); // pass! }