Wal*_*ter 7 c++ lambda attributes noreturn
假设我有一个lambda
auto func = [](std::string msg) { throw std::runtime_error(msg); };
Run Code Online (Sandbox Code Playgroud)
(诚然,这个例子没什么意义,但那不是重点).如果这不是lambda,而是普通函数,我会用noreturn属性声明它
[[noreturn]] void func(std::string msg) { throw std::runtime_error(msg); }
Run Code Online (Sandbox Code Playgroud)
这也可以用于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); };
Run Code Online (Sandbox Code Playgroud)
要么
auto func = [](std::string msg) [[noreturn]] { throw std::runtime_error(msg); };
Run Code Online (Sandbox Code Playgroud)
但两人都被拒绝了.这是clang 3.5的不完整/错误吗?
以下内容在 g++ 4.9.3 中有效:
void foo()
{
auto func = [] (std::string msg) [[noreturn]] { throw std::runtime_error(msg); };
}
Run Code Online (Sandbox Code Playgroud)
也可在http://ideone.com/49Ietf上使用。
| 归档时间: |
|
| 查看次数: |
1070 次 |
| 最近记录: |