如何将属性添加到lambda函数?

时间:2015-09-11 20:27:21

标签: c++ lambda attributes noreturn

假设我有一个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的不完整/错误吗?

1 个答案:

答案 0 :(得分:0)

以下内容适用于g ++ 4.9.3:

void foo()
{
  auto func = [] (std::string msg) [[noreturn]] { throw std::runtime_error(msg); };
}

也在http://ideone.com/49Ietf工作。