gcc
не может гарантировать, что это неверно, за исключением небольшого количества случаев, которые действительно не стоит проверять. Когда вы используете static_cast
, вы обещаете компилятору, что знаете, что делаете.
Здесь есть два вида приведений. static_cast
, то есть вы говорите компилятору, что указатель на базу - это указатель на производную, и заткнитесь и продолжайте. dynamic_cast
, то есть вы просите компилятор проверить, действительно ли этот указатель на базу является указателем на производную. Вы использовали static_cast
, поэтому компилятор заткнулся и сделал, как вы сказали.
Edit: Джон точно указал, что в вашей иерархии наследования нет виртуальных функций, для которых вы должны быть запущены из C ++, и dynamic_cast
действителен только для виртуальных функций.