带有lambda函数的C2665和Visual 2010中的enum,它是一个错误还是正常?
我可以得到下面的代码编译:带有lambda函数的C2665和Visual 2010中的enum,它是一个错误还是正常?
enum E {a, b, c}; void f()
{
E e;
std::function<void()> f = [&]() { e = a; };
}
但不是下列之一:
void f() {
enum E {a, b, c};
E e;
std::function<void()> f = [&]() { e = a; };
}
其发出以下编译器错误:
1>test.cpp(5): error C2665: '`anonymous-namespace'::<lambda1>::<lambda1>' : none of the 2 overloads could convert all the argument types 1> test.cpp(5): could be '`anonymous-namespace'::<lambda1>::(f::E &,f::E &)'
1> while trying to match the argument list '(f::E, f::E)'
那是错误预见的或这是一个错误?
回答:
这看起来与http://social.msdn.microsoft.com/Forums/en/vclanguage/thread/88f533d8-b7f5-4416-bdcf-b461aeb74178上的问题完全相同。在那里,它似乎是编译器中的一个错误。 MSVC在lambdas中似乎有一些本地类型的问题;另请参阅http://connect.microsoft.com/VisualStudio/feedback/details/675113/lambda-expression-causes-internal-compiler-error#details。
没有语言5.1.2 Lambda表达式[expr.prim.lambda]表示本地定义的类型不能在lambda中捕获。
以上是 带有lambda函数的C2665和Visual 2010中的enum,它是一个错误还是正常? 的全部内容, 来源链接: utcz.com/qa/264991.html