Проверка типа на dynamic_cast
реализована по-разному в разных реализациях C ++; если вы хотите получить ответ для конкретной реализации, вам следует указать, какую реализацию вы используете. Единственный способ ответить на вопрос в целом - обратиться к стандарту ISO C ++.
По моему прочтению стандарта, вызов dynamic_cast
для указателя void недопустим:
dynamic_cast<T>(v)
«Если T - тип указателя, v должно быть значением указателя на завершенный тип класса»
(из 5.2.7.2 стандарта ISO C ++). void
не является полным типом класса, поэтому выражение недопустимо.
Интересно, что тип, преобразуемый в , может быть указателем void, т.е.
void * foo = dynamic_cast<void *>(some_pointer);
В этом случае dynamic_cast
всегда выполняется успешно, и результирующее значение является указателем на наиболее производный объект, на который указывает v
.