Ich definiere Padding quasi immer selber, wenn ich andere Bibliotheken einbinde. Bei mir wird etwa
struct Foo {
int a;
void * b;
};
zu
#if COMPILED_FOR_X64
#define PAD_4B_ON_X64 int : 32 // vier anonyme Bytes
#else
#define PAD_4B_ON_X64 // tut nix
#endif
struct Foo {
int a;
PAD_4B_ON_X64;
void * b;
};
… und das hat nun lange sehr gut funktioniert, aber mit constexpr geht das leider in die Brüche: Während Visual C++ die anonymen Daten praktischerweise ignoriert, will Clang sie initialisiert haben:
constexpr Foo f = { 1, 2 }; // Fehler: initialisiert a und das Padding; lässt b uninitialisiert
Tja. Weiß zufällig jemand von euch, ob ich darauf hoffen kann, dass Clang die Member irgendwann ignoriert, oder ist das im Standard schlicht nicht definiert?