Это, вероятно, будет работать, но я не верю, что это гарантировано. Ниже приводится цитата из ISO C ++ 10/5:
Подобъект базового класса может иметь компоновку (3.7), отличную от компоновки наиболее производного объекта того же типа.
Трудно понять, как в "реальном мире" это может быть на самом деле.
РЕДАКТИРОВАТЬ:
Суть в том, что стандарт не ограничил количество мест, в которых расположение подобъектов базового класса может отличаться от конкретного объекта с таким же базовым типом. В результате любые предположения, которые вы можете иметь, такие как POD-сущность и т. Д., Не обязательно верны для подобъекта базового класса.
EDIT:
Альтернативный подход, и тот, чье поведение хорошо определено, состоит в том, чтобы сделать 'foo' членом 'bar' и предоставить оператор преобразования там, где это необходимо.
class bar {
public:
int my_bar() {
return ret_foo( foo_ );
}
//
// This allows a 'bar' to be used where a 'foo' is expected
inline operator foo& () {
return foo_;
}
private:
foo foo_;
};