ref const array error

Timon Gehr timon.gehr at gmx.ch
Wed Jan 18 11:43:52 PST 2012


On 01/18/2012 08:31 PM, jdrewsen wrote:
> Recently the encoding.safeDecode stopped working for some of my existing
> code. This example outlines the issue:
>
> import std.encoding;
>
> void main(string[] args) {
> auto e = EncodingScheme.create("utf-8");
> auto a = new byte[100];
> e.safeDecode(a);
> }
>
> Results in:
>
> Error: function std.encoding.EncodingScheme.safeDecode (ref
> const(ubyte)[] s) const is not callable using argument types (byte[])
>
> Isn't this an error in the compiler?
>
> /Jonas
>

No, this is a bugfix. The operation is unsound:

immutable(ubyte)[] foo(ref const(ubyte)[] s){
     auto r = new immutable(ubyte)[1];
     s = r;
     return r;
}

void main() {
     ubyte[] x;
     immutable(ubyte)[] y = foo(x);
     static assert(is(typeof(y[0])==immutable));
     auto oldy0 = y[0];
     x[0]=oldy0+1;
     assert(oldy0 == y[0]); // fail
}

The functionality is not going away; You will be able to use inout for 
the same purpose once my enhancement request gets implemented: 
http://d.puremagic.com/issues/show_bug.cgi?id=7105




More information about the Digitalmars-d mailing list