Re: Нелогичность static_cast
От: lst Россия  
Дата: 06.10.04 04:09
Оценка:
Здравствуйте, folk, Вы писали:

F>
F>struct B {};
F>struct D : B {};

F>int main()
F>{
F>    B b;
F>    B* pb1 = reinterpret_cast<B*>( reinterpret_cast<D*>( &b ) ); // pb1 == &b
F>    B* pb2 = static_cast     <B*>( static_cast     <D*>( &b ) ); // значение pb2 неопределено согласно 5.2.9/1 :crash: 
F>}
F>

F>1. Почему так жестоко? Неужто нельзя было просто ограничить операции, допустимые над результатом static_cast<D*>(B*) ?

F>2. Может я все-таки ошибаюсь и там нет ub?
Есть согласно 5.2.9/8, т.к. в нашем случае не удовлетворяется условие:

[skipped]
If the rvalue of type "pointer to cv1 B" points to the B that is actually a sub-object of an object of type D, the resulting pointer points to the enclosing object of type D.
[skipped]

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.