在我的工作场所,我们为noreturn属性使用了不同的内部名称。假设它是INTERNAL_DONT_RETURN
我正在写一个类的成员函数,我做类似的事情

INTERNAL_DONT_RETURN void foo() const
{
    if(!*this)
    {
       throw CoolException();
    }
    m_call_throw();
}

此m_call_throw()是私有(private)类成员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] } ^
我已经咨询了thisthis问题,但没有一个解释上述警告的原因。

1)编译器是否按here的说明隐式添加return

2)即使当我抛出异常时,为什么编译器也认为我的函数会返回?

3)noreturn attribute提到



这和我的问题有关吗?

最佳答案

但是你回来了!如果if语句为false,则返回函数结尾。您可能知道这永远不会发生,因为m_call_throw()也不会返回任何一个(是吗?),但是编译器显然不理解此逻辑。
m_call_throw()是否标记为noreturn?如果没有,请添加它。而且,如果编译器没有对此进行处理,则可以在函数的末尾添加一个额外的抛出,该抛出永远不会到达,但是应该使警告消失。

08-16 09:30