void.sizeof == 1, not 0

simendsjo simendsjo at gmail.com
Tue Jul 5 04:50:00 PDT 2011


On 01.07.2011 22:18, Ali Çehreli wrote:
> On Fri, 01 Jul 2011 21:18:45 +0200, simendsjo wrote:
>
>> What is contained within this byte?
>> (T[0]).sizeof == 0, why isn't void also 0?
>
> void* can point to any data, in which case it is considered to be
> pointing at the first byte of the data. Having a size of one makes it
> point to the next byte when incremented:
>
>      int i;
>      void * v =&i;   // first byte
>      ++v;             // second byte
>
> Similarly, an empty struct has a size of one:
>
> import std.stdio;
>
> struct S
> {}
>
> void main()
> {
>      assert(S.sizeof == 1);
> }
>
> But in that case it is needed to identify S objects from one another just
> by having different addresses. The following array's data will occupy 10
> bytes:
>
>      S[10] objects;
>      assert(&(objects[0]) !=&(objects[1]));
>
> Ali

Needed some time to digest your answer, but it makes sense now. Thanks.


More information about the Digitalmars-d-learn mailing list