Прежде всего, использование typeid
(или dynamic_cast
), когда RTTI отключен, определенно приведет к неопределенному поведению. Мой совет - не делать этого.
В любом случае, я не верю, что вам нужно что-то делать, кроме /GR-
, чтобы отключить RTTI в компиляторе Microsoft. Возможно, это ошибка, которая не выдает предупреждение или ошибку при этом. Выдает предупреждение за dynamic_cast
:
1>d:\src\MyClass.cpp (82) : warning C4541: 'dynamic_cast' used on polymorphic type 'MyClass' with /GR-; unpredictable behavior may result
Однако, это не дает такого предупреждения для typeid
. Это не изменилось и в компиляторе VS2010.
Примечание: gcc выдает ошибку компиляции, если вы пытаетесь использовать typeid
с -fno-rtti
, а clang - нет (даже с -Wall
).