Код в вашем вопросе такой же или похож на код, с которым у вас проблемы?
Оператор typeid
, когда он применяется к полиморфным типам, возвращает объект type_info
, который идентифицирует тип динамический полиморфного объекта. Так, например, если вы примените typeid
к ссылке типа Base &
(где Base
является полиморфной), которая фактически связана с объектом типа Derived
(где Derived
является производным от Base
), объект type_info
, возвращаемый typeid
, будет соответствовать классу Derived
, а не Base
. Может быть, что-то подобное происходит в вашем коде?
Кроме того, в некоторых компиляторах (например, MS Visual Studio) для использования полнофункционального typeid
, как описано выше, вам необходимо скомпилировать код с включенной информацией о типах времени выполнения (RTTI). Возможно, отсутствие RTTI привело к странным эффектам, которые вы наблюдали.
P.S. Вопреки тому, что указано в принятом в настоящее время ответе, typeid
является полностью и совершенно стандартной функцией C ++. Это не расширение компилятора.