У меня есть короткий фрагмент кода с использованием лямбда, который компилируется отлично, но 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 (и с этим измененным кодом, я есть), но я думал, что мне не нужно, если в лямбде есть только одна строка. Кроме того, я не знаю, что делает [&].
Нет, вам не нужен явный тип возврата в этом случае. И [&] - это предложение захвата, объясняемое во многих введениях лямбда. – chris