次のスニペットを含むD2ソースコードは、DMD2.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に等しくなります)。
どうすれば修正できますか?
これはあなたが望むことをするようです:
align(1) union Prefix
{
ubyte[9] data;
struct
{
uint fileno;
uint lineno;
char delim;
}
}
static assert(Prefix.sizeof == 9);
align(1)
キーワードの前に置くunion
だけで、アサートパスを作成できます。これは、キーワード内のデータがギャップなしで自然に整列されるためです。align(1):
それ以外の場合は、共用体/構造体のフィールドの前に追加する必要があります。
おそらくバグです。または、構造体に名前を付けると整列が戻るため、あいまいなロジックがあります。
編集: バグを報告: http://d.puremagic.com/issues/show_bug.cgi?id=8566
編集:ウォルターは私の間違いを説明してくれました:)