std::remove_if – lambda, not removing anything from the collection
You need to call erase on the iterator returned from remove_if, It should look something like this: auto new_end = std::remove_if(MyDisplayDevices.begin(), MyDisplayDevices.end(), [](const DisplayDevice3d& device) { return device.Modes.size() == 0; }); MyDisplayDevices.erase(new_end, MyDisplayDevices.end());