包含以下代码段的D2源代码可以在DMD 2.059下编译
union Prefix {
char[9] data;
align(1) struct { uint fileno; uint lineno; char delim; };
}
static assert(Prefix.sizeof == 9);
并且很遗憾在DMD 2.060下失败(Prefix.sizeof等于12)。
如何解决?
答案 0 :(得分:3)
这似乎可以做你想要的:
align(1) union Prefix
{
ubyte[9] data;
struct
{
uint fileno;
uint lineno;
char delim;
}
}
static assert(Prefix.sizeof == 9);
答案 1 :(得分:1)
在align(1)
关键字之前放置union
足以使断言通过,因为其中的数据自然对齐而没有间隙。否则,您需要在union的/ struct的字段之前添加align(1):
。
答案 2 :(得分:0)
可能是一个错误。或者一些模糊的逻辑,因为命名一个结构会返回对齐。
编辑: 提起了一个错误:http://d.puremagic.com/issues/show_bug.cgi?id=8566
编辑: 沃尔特在那里解释了我的错误:)