Error: variable "cannot be implicitly captured because no default capture mode has been specified"
You must specify flagId
to be captured. That is what the []
part is for. Right now it doesn't capture anything. You can capture (more info) by value or by reference. Something like:
auto new_end = std::remove_if(m_FinalFlagsVec.begin(), m_FinalFlagsVec.end(),
[&flagId](Flag& device)
{ return device.getId() == flagId; });
Which captures by reference. If you want to capture by const value, you can do this:
auto new_end = std::remove_if(m_FinalFlagsVec.begin(), m_FinalFlagsVec.end(),
[flagId](Flag& device)
{ return device.getId() == flagId; });
Or by mutable value:
auto new_end = std::remove_if(m_FinalFlagsVec.begin(), m_FinalFlagsVec.end(),
[flagId](Flag& device) mutable
{ return device.getId() == flagId; });
Sadly there is no straightforward way to capture by const reference. I personally would just declare a temporary const ref and capture that by ref:
const auto& tmp = flagId;
auto new_end = std::remove_if(m_FinalFlagsVec.begin(), m_FinalFlagsVec.end(),
[&tmp](Flag& device)
{ return device.getId() == tmp; }); //tmp is immutable
It won't let me comment because I don't have enough "points" but to reply to AndyG there is an easy way to capture by const reference now:
auto new_end = std::remove_if(m_FinalFlagsVec.begin(), m_FinalFlagsVec.end(),
[&flagId = as_const(flagId)](Flag& device)
{ return device.getId() == flagId; });