На моем рабочем месте у нас есть другое внутреннее имя для атрибута noreturn
. Предположим, что INTERNAL_DONT_RETURN
ошибка: функция объявлена «noreturn» не должна возвращаться
Я пишу функцию-член класса, где я сделать что-то вроде
INTERNAL_DONT_RETURN void foo() const
{
if(!*this)
{
throw CoolException();
}
m_call_throw();
}
Это m_call_throw() является членом частного класса std::function<void()>m_call_throw
, который получает заполняется в конструкторе класса как лямбда. Это лямбда не делает ничего, кроме
m_call_throw([uncoolID]() { throw UncoolException(uncoolID); })
Теперь оба GCC-4.9.3 и лязг дает мне следующее предупреждение
error: function declared 'noreturn' should not return [-Werror,-Winvalid-noreturn] } ^
Я уже консультировалась this и this вопрос, но ни один из них не объяснил причина вышеупомянутого предупреждения.
1) Является ли компилятор неявным добавлением return
, как описано here?
2) Даже когда я бросаю исключения, почему компилятор считает, что моя функция вернется?
3) noreturn attribute упоминает, что
The noreturn keyword does not affect the exceptional path when that applies: a noreturn-marked function may still return to the caller by throwing an exception or calling longjmp.
Является ли это отношение к моей проблеме?
предоставьте [MCVE] –