Странное использование `?:` В ` typeid` code

В одном из проектов, над которыми я работаю, я вижу этот код

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 - это полиморфный класс (с виртуальным деструктором).

РЕДАКТИРОВАТЬ: В другом месте этого кода,Я вижу это, и он кажется эквивалентным «лишним»

template<typename T> T &nonnull(T &t) { return t; }

struct ClassY {
  bool isHoldingDerivedObj() const {
    return typeid(nonnull(*m_basePtr)) == typeid(Derived);
  }
  Base *m_basePtr;
};
59
задан Deduplicator 23 January 2015 в 23:40
поделиться