<分区>
假设我有一个 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 版本 6.0 (clang-600.0.57)(基于 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 的不完整/错误吗?