В одном из проектов, над которыми я работаю, я вижу этот код
struct Base {
virtual ~Base() { }
};
struct ClassX {
bool isHoldingDerivedObj() const {
return typeid(1 ? *m_basePtr : *m_basePtr) == typeid(Derived);
}
Base *m_basePtr;
};
Я никогда не видел typeid
. Почему он делает этот странный танец с ?:
вместо того, чтобы просто делать typeid(*m_basePtr)
? Может ли быть какая-то причина? Base
- это полиморфный класс (с виртуальным деструктором).
EDIT: В другом месте этого кода я вижу это, и он выглядит эквивалентно "лишним"
template<typename T> T &nonnull(T &t) { return t; }
struct ClassY {
bool isHoldingDerivedObj() const {
return typeid(nonnull(*m_basePtr)) == typeid(Derived);
}
Base *m_basePtr;
};