这个问题是我最近的一个问题的延续:
当使用 lambda 作为模板参数时,这个编译器错误是什么?
2014 年 11 月 11 日:微软回应称,这个错误的修复应该出现在 Visual C++ 的下一个主要版本中。
此代码无法使用 VS2012(更新 2)编译:
int main(int argc, char* argv[])
{
auto f = []()
{
int n = 0;
auto r = [=]{ return n; };
return r;
};
return 0;
}
这是我得到的编译器错误:
1> main.cpp
1>C:\test\main.cpp(7): error C2440: 'return' : cannot convert from 'main::<lambda_c5d1d707b91a1ddedc06eb080503550c>::()::<lambda_ac357c309731f4971c3269160ed9c24b>' to 'int (__cdecl *)(void)'
1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
- 根据 C++11 规范的代码有问题吗?
- 根据 VS2012 定义的部分 C++11 支持,代码有问题吗?
- 或者这是一个 VS2012 C++ 编译器错误?
- 有人能指出我在 C++11 规范中讨论 lambda 必须如何隐式转换为函数指针的地方吗?
- 我记得这仅适用于无状态lambda - 那些带有空捕获子句的 - 内部 lambda
r
不是 - 那么为什么推断的 lambda 的返回类型似乎
f
是一个函数指针,即int (__cdecl *)(void)
?
- 我记得这仅适用于无状态lambda - 那些带有空捕获子句的 - 内部 lambda