immutable bug?

John Colvin john.loughran.colvin at gmail.com
Sat Jan 11 10:43:38 PST 2014


On Saturday, 11 January 2014 at 18:29:36 UTC, Manu wrote:
> I just managed to assign a const(char)[] to a string... caused 
> crashes when
> the original memory disappeared.
>
> inout(char)[] todstr(inout(char)* cstr) pure nothrow
> {
> return cstr ? cstr[0 .. std.c.string.strlen(cstr)] : cstr[0 .. 
> 0];
> }
>
> struct Data
> {
> char buffer[256] = void;
> @property const(char)[] filename() const pure nothrow { return
> todstr(buffer.ptr); }
> }
>
> struct MyThing
> {
> private this(in Data* p)
> {
> filename = p.filename; // *** Uh oh! assigned a const(char)[] 
> @property to
> a string! ***
> }
>
> string filename;
> }
>
> Surely that assignment shouldn't be legal? Shouldn't I need to 
> idup?

I don't know about the details of what is/isn't legal here, but 
the only reason the compiler accepts it is because filename is 
marked as pure.


More information about the Digitalmars-d mailing list