2014-01-06 3 views
1

У меня есть короткий фрагмент кода с использованием лямбда, который компилируется отлично, но Intellisense вызывает ошибку.VS Express 2012 C++ лямбда Ошибка 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 (и с этим измененным кодом, я есть), но я думал, что мне не нужно, если в лямбде есть только одна строка. Кроме того, я не знаю, что делает [&].

+0

Нет, вам не нужен явный тип возврата в этом случае. И [&] - это предложение захвата, объясняемое во многих введениях лямбда. – chris

ответ

2

Это ошибка IntelliSense; он был исправлен в Visual Studio 2013. Вы можете игнорировать ошибочную ошибку.

Смежные вопросы