On Wednesday, 19 June 2013 at 15:25:15 UTC, Roger Stokes wrote:
page406x.d(11): Error: cannot implicitly convert expression (__r24.front()) of type ubyte[] to immutable(ubyte)[]

foreach (immutable(ubyte)[] buffer; stdin.byChunk(bufferSize)) {


The problem here is that byChunk returns a mutable buffer, type ubyte[]. If you said "foreach(ubyte[] buffer; stdin.byChunk(bufferSize)) {...}" you should be able to compile it.

I think this was changed after the book was written because byChunk now reuses its buffer. Each time through the loop, it overwrites the old data with the next batch, which means the old data cannot be immutable. (The reason for reusing it is to avoid allocating new memory for a fresh buffer every time.)

Since you aren't keeping a copy of the buffer, just changing the type should be enough for your program to work.

If you needed an immutable copy, if you were going to store it or something, the way you'd do that is to call buffer.idup:

foreach(ubyte[] temporaryBuffer; stdin.byChunk(bufferSize) {
     immutable(ubyte)[] permanentBuffer = temporaryBuffer.idup;
    // you can now use the permanentBuffer
}

Reply via email to