On Wed, 16 Apr 2014 14:36:20 +0100, Spacen Jasset <spacenjas...@mailrazer.com> wrote:

Why does the read function return void[] and not byte[]

void[] read(in char[] name, size_t upTo = size_t.max);

One one hand the data is always /actually/ going to be a load of (u)bytes, but /conceptually/ it might be structs or something else and using void[] therefore doesn't /imply/ anything about what the data really is.

I also thought that void[] was implicitly cast.. but it seems this either has never been the case or was changed at some point:

import std.stdio;

void main(string[] args)
{
        byte[] barr = new byte[10];
        foreach(i, ref b; barr)
                b = cast(byte)('a' + i);
        
        void[] varr = barr;
        char[] carr;
        
//carr = barr; // Error: cannot implicitly convert expression (barr) of type byte[] to char[]
        carr = cast(char[])barr;
        
//carr = varr; // Error: cannot implicitly convert expression (varr) of type void[] to char[]
        carr = cast(char[])varr;
        
        writefln("%d,%s", carr.length, carr);
}

I am curious, was it ever possible, was it changed? why? It's always "safe" - as the compiler knows how much data the void[] contains, and void[] is "untyped" so it sorta makes sense to allow it..

R

--
Using Opera's revolutionary email client: http://www.opera.com/mail/

Reply via email to