Tuple DIP

Petar Petar
Tue Jan 23 14:58:07 UTC 2018


On Tuesday, 23 January 2018 at 11:04:33 UTC, Atila Neves wrote:
> On Sunday, 14 January 2018 at 18:17:38 UTC, Timon Gehr wrote:
>> On 14.01.2018 19:14, Timothee Cour wrote:
>>> actually I just learned that indeed 
>>> sizeof(typeof(tuple()))=1, but why
>>> is that? (at least for std.typecons.tuple)
>>> maybe worth mentioning that in the DIP (with rationale)
>>
>> It's inherited from C, where all struct instances have size at 
>> least 1. (Such that each of them has a distinct address.)
>
> Inherited from C++. In C empty structs have size 0. This caused 
> me all sorts of problems when importing C headers from C++ in 
> funky codebases.
>
> foo.c:
> #include <stdio.h>
>
> struct Foo {};
>
> int main() {
>     printf("%zu\n", sizeof(struct Foo));
>     return 0;
> }
>
>
> % clear && gcc foo.c && ./a.out
> 0
>
> % clear && gcc -xc++ foo.c && ./a.out
> 1
>
>
> Atila

AFAIR the ISO C standard does not allow empty structs (as they 
would have no meaning). If you use the warnings as errors option, 
it won't compile:

<source>:3:8: error: struct has no members [-Werror=pedantic]
  struct Foo {};
         ^~~


More information about the Digitalmars-d mailing list