我在vc2010上写了一些使用lambda的代码。代码的简化结构是象下面这样:使用嵌套lambda时出现奇怪的编译错误
template<typename Functor>
bool f1(int a, Functor& f)
{
return f(a+1);
}
template<typename Functor>
bool f2(Functor& f)
{
return f(1);
}
template<typename Functor>
bool f3(Functor& f)
{
return f2([&](int a) -> bool {
// (1) Works
auto test = [&](int b) -> bool { return f(a+b); };
return f1(a, test);
// (2) Doesn't work
//return f1(a, [&](int b) -> bool { return f(a+b); });
});
};
int main()
{
int a = 100;
f3([&](int b) { return (a+b)%2 == 0; });
}
首先我写一个嵌套拉姆达代码作为(2),和VC10给出像下面
'f1' : cannot convert parameter number from 'int' to 'int &'
然而代码(1)的工作原理一个难以理解的错误消息那么,除了左值外,这与(2)是一致的。
我的问题是:
- 是代码(2)符合C++ 11标准?
- 如果不是,这种奇怪的编译行为是什么原因?
哦,它帮了我很多。谢谢! – summerlight