Читая стандарт, в 5.2.7 / 6 мы находим, что если цель не является однозначной основой источника, источник должен быть полиморфного типа. Тогда в 10,3 / 1
Виртуальные функции поддерживают динамическое связывание и исключают
программирование. Класс, который объявляет или наследует виртуальную функцию
называется полиморфным классом.
Другими словами, стандарт, похоже, ничего не говорит о вашем вопросе. В этом случае стандарт не позволяет компилятору отключать RTTI, поэтому для каждого компилятора вы должны проверить его документацию, чтобы увидеть, что произойдет. Исходя из этого прочтения, я думаю, что это вопрос компилятора, а не вопрос языка C ++, как указывает тег.
Кроме того, вы можете полностью избежать этой проблемы, просто используя static_cast
, когда вы знаете, что этого достаточно.