2014-01-06 50 views
1

我有涉及,编译罚款拉姆达一小段程式码,但智能感知抛出一个错误。VS Express 2012 C++ lambda Intellisense错误?

items.erase(remove_if(begin(items), end(items), 
[](const Item& mItem){ return mItem.booleanMember; }), 
end(items)); 

的错误是

IntelliSense: more than one conversion function from "lambda []bool (const Item &mItem)->bool" to "<error-type>" applies: 
     function "lambda []bool (const Item &mItem)->bool::operator bool (*)(const Item &mItem)() const" 
     function "lambda []bool (const Item &mItem)->bool::operator bool (*)(const Item &mItem)() const" 
     function "lambda []bool (const Item &mItem)->bool::operator bool (*)(const Item &mItem)() const" 

如果我更改代码以

items.erase(remove_if(begin(items), end(items), 
[&](const Item& mItem)->bool{ return mItem.booleanMember; }), 
end(items)); 

然后错误消失。我会很好,但我不完全知道发生了什么。我知道我没有明确指定一个布尔返回值(以及与此改变的代码,我),但我觉得我没必要,如果有在lambda只有一行。另外,我不知道是什么[&]在做什么。

+0

不,你不需要在这种情况下,显式的返回类型。并且[&]是捕获条款,在许多lambda介绍中进行了解释。 – chris

回答

2

这是一个智能感知的错误;它已在Visual Studio 2013中修复。您可以忽略错误的错误。