【发布时间】:2016-02-25 17:18:47
【问题描述】:
我想在 lambda 中使用 constexpr 值。阅读答案 Using lambda captured constexpr value as an array dimension,我认为以下应该可行:
#include<array>
int main()
{
constexpr int i = 0;
auto f = []{
std::array<int, i> a;
};
return 0;
}
但是,Clang 3.8(带有 std=c++14)抱怨
变量 'i' 不能在 lambda 中隐式捕获,没有 指定默认捕获
这应该被认为是 clang 3.8 中的一个错误吗?
顺便说一句:
上面的代码可以用 gcc 4.9.2 编译。 如果我将 lambda 表达式更改为显式捕获:
...
auto f = [i]{
...
clang 3.8 编译它,但 gcc 4.9.2 失败:
错误:‘i’的值在常量表达式中不可用 ...
【问题讨论】:
-
[constexpr int _i =i]{}有什么不同吗? -
不,在 gcc 4.9.2 和 Clang 3.8 下都不能编译。
-
hmmm.... 我猜你认为 #define 作为(临时)解决方案?
-
但是宏是邪恶的!另外,它们不能用 constexpr 函数赋值。
-
@GuillaumeRacicot:这只是一个口头禅。从这里引用:stackoverflow.com/questions/14041453/…“宏就像任何其他工具一样 - 用于谋杀的锤子不是邪恶的,因为它是一把锤子。人们以这种方式使用它的方式是邪恶的。如果你想锤钉子,锤子是完美的工具。”
标签: c++ lambda c++14 constexpr