Я только что потратил путь слишком долго, пытаясь выяснить, почему в следующем фрагменте кода метод ProcessEvent()
, похоже, игнорирует значение false
, которое я передал для aInvokeEventHandler
:
HRESULT
CEventManager::
Process(Event anEvent)
{
return (m_pPool->GetFsm()->ProcessEvent(anEvent), false);
}
// Definition of ProcessEvent()
HRESULT ProcessEvent(const Event& anEvent, bool aInvokeEventHandler = true);
Всякий раз, когда я нарушал метод ProcessEvent()
, aInvokeEventHandler
всегда будет true
, независимо от того, прошел ли я в false
.
Мне потребовался напарник, чтобы указать мне, что значение false
должно быть внутри внутренних скобок в строке return
, например:
return m_pPool->GetFsm()->ProcessEvent(anEvent, false); // Corrected code
Как только я это увидел, я ударил себя ногой. Обнаружение этого было очевидно затруднено, потому что оригинальный кодер использовал избыточные внешние круглые скобки в строке return
.
Мой вопрос: почему компилятор не подобрал это для меня?
Мой метод возвращает HRESULT
, но в приведенном выше исходном коде я явно возвращаю составной набор значений в скобках, т.е.:
(HRESULT, bool)
Является ли обозначение, подобное этому, приемлемым в стандартах C / C ++, и если да, то какова цель такого разрешения? Или это ошибка в компиляторе?