假设我有一个lambda
auto func = [](std::string msg) { throw std::runtime_error(msg); };
(诚然,这个例子没什么意义,但那不是重点)。如果这不是lambda,而是普通函数,我会用noreturn
属性声明它,如
[[noreturn]] void func(std::string msg) { throw std::runtime_error(msg); }
这也可以用于lambda吗? (我用clang 3.5尝试了几种变体,但没有任何成功。)
编辑使用Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn)
,我尝试了
auto func = [](std::string msg) -> [[noreturn]] void { throw std::runtime_error(msg); };
或
auto func = [](std::string msg) [[noreturn]] { throw std::runtime_error(msg); };
但两人都被拒绝了。这是clang 3.5的不完整/错误吗?
答案 0 :(得分:0)
以下内容适用于g ++ 4.9.3:
void foo()
{
auto func = [] (std::string msg) [[noreturn]] { throw std::runtime_error(msg); };
}