在默认初始化器中使用lambda
Using lambda in default initializer gcc vs clang
#include <cassert>
#include <cmath>
int main()
{
struct point_of_cone
{
double x, y;
double z = [&] { using std::sqrt; return sqrt(x * x + y * y); }();
};
point_of_cone p = {3.0, 4.0};
assert(p.z == 5.0);
}
对于clang++
from trunk工作正常,但是对于g++
from trunk失败,出现错误消息(link):
错误:'this'未捕获此lambda函数
命名空间作用域中point_of_cone
的定义对两者都适用。
稍微修改了[this]
lambda捕获的定义,也可以在全局或局部范围内正常工作。
哪个编译器是正确的?
这是一个gcc bug。
int main() {
struct A {
int x, i = [&] { return x; }();
} a{0};
}
这个失败了,但是如果我们…
- 更改
&
为this
,或 - 声明
A
具有命名空间作用域,
它的工作原理。但是,这两种方法都不应该对格式良好性有任何影响。
报道:# 78019 .
相关文章:
- 在未显式传递参数时默认使用 lambda 的用户输入
- 处于默认参数位置的 Lambda 无法访问好友成员。这是编译器错误吗?
- 变量不能在 lambda 中隐式捕获,并且没有使用 switch 语句指定捕获默认值
- 是否可以使用默认泛型参数在C++中定义 lambda?
- C++14 及更高版本是否允许 Lambda 函数的默认参数?如果是这样,怎么办?
- 使用默认参数从 lambda 调用最少数量的参数
- 可以使用默认参数复制包含 lambda 的 std::函数吗?
- lambda 的默认捕获是什么?
- 默认引用与命名的 lambda 捕获
- 在默认初始值设定项中使用 lambda 与使用成员函数
- 如何编写具有默认参数的lambda的通用函数
- 未评估上下文中的默认模板参数和 lambda:错误还是功能?
- 默认模板类Lambda
- C++14 lambda 的默认参数类型推导,具体取决于前面的参数
- 如何将 lambda 用作模板参数,C++ 中的默认值
- 默认函数对象值作为要使用lambda调用的函数参数
- 模板,lambda作为每个实例化的唯一默认参数
- 当另一个调用 lambda 使用默认捕获时,lambda 的闭包可能会被破坏吗?
- 将具有默认参数的lambda函数复制到变量
- 在C++11中使用lambda默认值捕获或引用捕获的缺点