Существуют ли какие-либо стандартные гарантии для контейнеров STL?

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;, (Я не говорю, что это хороший дизайн!).

2

Решение

нет, нет никаких гарантий.

Стандарт C ++ 11 явно упоминает, когда класс должен иметь стандартную компоновку (например, mutex класс, atomic_flag класс и т. д.).

Слово «макет» отсутствует во всем разделе 23 (Библиотека контейнеров). Я считаю, что этого достаточно, чтобы предположить, что никаких гарантий не дано.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]