我有一段简短的代码片段,涉及编译好的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));
然后错误就消失了。我会很好,但我不知道发生了什么。我知道我没有明确指定bool返回值(并且使用此更改的代码,我),但我认为如果lambda中只有一行,我不需要。另外,我不知道[&amp;]正在做什么。
答案 0 :(得分:2)
这是一个IntelliSense错误;它已在Visual Studio 2013中修复。您可以忽略错误的错误。