在我的工作場所,我們有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)編譯器是否像here那樣隱式添加return
?
2)即使當我拋出異常,爲什麼編譯器相信我的函數將返回?
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] –