Аноним 691:
А>вот цитата из "Эффективное использование С++" Скотта Мэйерса:
А>Но имейте в виду, что в общем случае оптимизация EBO применяется только для одиночного наследования. Действующие в С++ правила размещения объектов в памяти обычно делают невозможной такую оптимизацию, если производный класс имеет более одного базового.
к сожалению, автор только ссылается на некие правила С++ и не дает никаких комментариев по этому поводу...
Возможно, это какие-то неформальные правила

Я как-то пытался найти ответ на схожий вопрос: из какого нормативного текста стандарта следует, что два подобъекта, имеющие один и тот же тип и принадлежащие одному и тому же most derived объекту, должны располагаться по разным адресам. Мои поиски так и не увенчались успехом.
#include <iostream>
struct B
{
B *ptr() { return this; }
};
struct D : B
{
B b;
};
int main()
{
D d;
std::cout << (d.ptr() == d.b.ptr()) << std::endl;
}
Может ли равенство d.ptr() == d.b.ptr() быть истинным? Согласно примечанию в 10/5, не может, но примечания не являются нормативными, и разработчики компиляторов вправе их игнорировать. В данном случае VC++ 8.0 и Intel C++ 11.0 располагают data member и базовый подобъект по одному адресу.