struct A {
// ... some methods ...
std::vector<int> foo;
// ... more data members ...
};
g ++4.7とlibstdc++を使用すると、が得られstd::is_standard_layout<A>::value == true
ます。
しかし、他のコンパイラや標準ライブラリはどうなりますか?
(少なくとも確実に)STLコンテナが標準レイアウトを破らないという保証はありますか?
バックグラウンド:
struct B : A { // still standard-layout
// ... more methods (but no new variables!)
void bar();
};
これにより、の使用static_cast<B &>(a).bar()
も可能になりますA a;
。(これが良いデザインだと言っているのではありません!)。