我遇到了一些涉及本地类和lambdas的奇怪的编译器错误。我已将其缩小到以下示例:
int main()
{
class test {
void foo(int bar) {
auto lambda = [=] (int) { return bar; };
}
};
return 0;
}
VS10说:
错误C2326:'void main :: test :: foo(int)':函数无法访问'bar'
在本地类中使用lambdas是否有任何限制,或者这是编译器中的错误吗?
感谢你的帮助。
答案 0 :(得分:2)
我可以确认只有在函数中定义类并且lambda接受参数时才会在VS10中发生这种情况。 g ++中没有出现这样的问题。
我相信这确实是一个错误,如果你打开一个缺陷请在这里链接到它,以便我们跟进它(否则让我知道,我会打开一个缺陷)。
答案 1 :(得分:0)
你试过吗
int main()
{
class test {
void foo(int bar) {
auto lambda = [bar] (int) { return bar; };
}
};
return 0;
}
也许在VS10中实现lambdas并不完整,因为你的例子在g ++ 4.5上工作正常 - http://www.ideone.com/5xQpz