struct{
char a;
T b[];
}
で、bの先頭アドレスは少なくとも2,4,8,16の倍数ではないです、
この構造体の実体が最大アラインメントの倍数のアドレスにいる限り
てことはアラインメントがそろわないからマクロTは1バイトのアラインメント
の型しか使えなくないですか?