我在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