Компилятор не помечает неправильное возвращаемое значение для HRESULTC++

Программы на C++. Форум разработчиков
Anonymous
Компилятор не помечает неправильное возвращаемое значение для HRESULT

Сообщение Anonymous »

Я только что потратил слишком слишком много времени, пытаясь понять, почему в следующем фрагменте кода метод 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 m_pPool->GetFsm()->ProcessEvent(anEvent, false); // Corrected code
Как только я это увидел, я ударил себя ногой. Обнаружить это, очевидно, было сложнее, потому что первоначальный кодировщик использовал избыточные внешние круглые скобки в возвращаемой строке.

Мой вопрос: почему разве компилятор не уловил это за меня?

Мой метод возвращает HRESULT, однако в исходном коде выше я явно возвращаю составной результат набор значений в круглых скобках, т.е.:

Код: Выделить всё

(HRESULT, bool)
Приемлемо ли подобное обозначение в стандартах C/C++, и если да, то с какой целью это разрешено? Или это ошибка компилятора?

Подробнее здесь: https://stackoverflow.com/questions/104 ... or-hresult

Вернуться в «C++»