带有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

回到顶部