在另一个lambda中调用catch块中捕获的lambda会产生GCC错误
Calling captured lambda in catch block in another lambda yields GCC error
考虑以下代码:
auto lambda=[] () { std::cout << "Error occurred!" << std::endl; };
auto lambda_2=[=/*,lambda*/] () {
try {
// Do something
std::cout << (2+2) << std::endl;
} catch (...) {
lambda();
throw;
}
};
我的期望:这个代码可以编译。
Reality (MinGW 4.8.0):
main.cpp: In lambda function:
main.cpp:27:5: error: '...' handler must be the last handler for its try block [
-fpermissive]
} catch (...) {
^
如果取消注释lambda
的显式副本捕获,代码将编译,但是这会发出警告:
main.cpp:20:19: warning: explicit by-copy capture of 'lambda' redundant with by-
copy capture default [enabled by default]
auto lambda_2=[=,lambda] () {
^
这是GCC的问题,还是lambda捕获的某些方面我不理解?
EDIT:以下编译:
auto lambda=[] () { std::cout << "Error occurred!" << std::endl; };
auto lambda_2=[&] () {
try {
// Do something
std::cout << (2+2) << std::endl;
} catch (...) {
try {
lambda();
} catch (...) { }
throw;
}
};
这是一个编译器错误。
显然,它在4.8.1中得到了修复,有望很快发布。
相关文章:
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- Visual C++: MSVC vs. GCC+CLANG: 处理 lambda 捕获类成员变量,正确的方法是什么?
- 为什么 GCC 和 clang 之间编译的 c++17 lambda 存在差异?
- 修改嵌套 lambda 中捕获的参数:gcc 与 clang?
- 在折叠表达式中扩展参数包作为 lambda 捕获的一部分 - gcc 与 clang
- GCC 6.x警告有关Lambda可见性
- 与lambda一起使用虚拟继承在初始化列表中捕获此问题的GCC错误
- 在折叠表达式中使用 lambda 时"Uninitialized captured reference"错误 - clang vs gcc
- 为什么将 lambda 用于非类型模板参数时 gcc 失败?
- 如何在 c++/gcc 中获取 lambda 函数名称?
- 如何获取在 gcc 5+ 上不起作用的 lambda 函数
- 使用 lambda 的错误 gcc 行为
- 将参数包扩展到具有折叠表达式的lambda -GCC与Clang
- 从值捕获的变量分配到lambda参数时,GCC编译器分割故障
- 如果对QObject::connect()使用lambda函数,则使用gcc编译失败
- 可能的 gcc 错误与 C++14 多态 lambda
- 在非“constexpr”上下文中的“constexpr”函数中使用lambda:clang vs gcc
- 与GCC/MSVC中的lambda转换构造函数不一致
- 为什么不允许使用=和this的lambda(但GCC接受)
- GCC在lambda函数中通过引用错误地捕获全局变量