【发布时间】:2016-12-01 03:33:34
【问题描述】:
在我的工作场所,noreturn 属性的内部名称不同。假设是INTERNAL_DONT_RETURN
我正在编写一个类的成员函数,我在其中执行类似的操作
INTERNAL_DONT_RETURN void foo() const
{
if(!*this)
{
throw CoolException();
}
m_call_throw();
}
这个 m_call_throw() 是一个私有类成员 std::function<void()>m_call_throw,它作为 lambda 填充到类的构造函数中。这个 lambda 只做
m_call_throw([uncoolID]() { throw UncoolException(uncoolID); })
现在 gcc-4.9.3 和 clang 都给了我以下警告
error: function declared 'noreturn' should not return [-Werror,-Winvalid-noreturn]
}
^
我已经咨询了this 和this 的问题,但他们都没有解释上述警告的原因。
1) 编译器是否按照here 的解释隐式添加return?
2) 即使我抛出异常,为什么编译器会相信我的函数会返回?
3) noreturn attribute 提到
noreturn 关键字不会影响异常路径 适用:一个 noreturn 标记的函数仍然可以通过以下方式返回给调用者 抛出异常或调用 longjmp。
这与我的问题有关吗?
【问题讨论】: