VS Express 2012 C ++ lambda Intellisense错误?

时间:2014-01-06 20:57:26

标签: c++ visual-studio-2012 lambda

我有一段简短的代码片段,涉及编译好的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;]正在做什么。

1 个答案:

答案 0 :(得分:2)

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