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