を返すべきではありません「noreturn」を宣言し、我々はnoreturn
属性の異なる内部名を持っています。それは私が)私はエラー:関数は、私の職場で
INTERNAL_DONT_RETURN void foo() const
{
if(!*this)
{
throw CoolException();
}
m_call_throw();
}
このm_call_throw(のような何かをクラスのメンバ関数を書いていますINTERNAL_DONT_RETURN
であると仮定すると、ラムダとしてクラスのコンストラクタに移入ますプライベートクラスメンバーstd::function<void()>m_call_throw
です。このラムダ今すぐ両方
m_call_throw([uncoolID]() { throw UncoolException(uncoolID); })
が、何もしない、GCC-4.9.3と打ち鳴らすには、私がすでにthisとthis疑問を相談している
error: function declared 'noreturn' should not return [-Werror,-Winvalid-noreturn] } ^
次の警告を与えるが、それらのどれも説明していません上記の警告の原因。 hereを説明するように
1)は、コンパイラが暗黙的に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.
は私の問題には、この関連性があることに言及noreturn attribute
3)?
[MCVE] –