Стандарт утверждает в 5.4.7, что приведение в стиле C может фактически сделать больше, чем любая последовательность приведений в новом стиле - в частности, включая приведение от указателя к производному к указателю. на базу, даже когда базовый класс недоступен, что именно здесь происходит с частным наследованием. (Почему это должно быть разрешено, и, в частности, почему оно должно быть разрешено только для приведений в стиле C, совершенно вне моего понимания, но это, несомненно, разрешено.)
Таким образом, dribeas прав, компиляторы обязаны правильно обрабатывать преобразование указателя в стиле C в OP, даже когда B
наследуется от нескольких базовых классов. Мое собственное тестирование с MSVC ++ 8 и MinGW подтверждает его результаты на практике - когда B
наследует от нескольких базовых классов, компилятор будет корректировать указатели при преобразовании B*
в A*
или наоборот, так что правильный объект или подобъект идентифицирован.
Я настаиваю на своем утверждении, что вы должны получить B
публично из A
, если вы когда-нибудь намереваетесь трактовать B
как A
, поскольку вместо этого используется личное наследование требует с использованием бросков в стиле C.