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 {};
        ^~~

Reply via email to