Today I was doing a bit of code, which looked something like this:
vec.erase(std::remove_if(vec.begin(), vec.end(), <lambda here>));
When above code was not supposed to erase anything, meaning that std::remove_if should return vec.end(), I was very surprised when i received my vector with size decreased by one: last element was erased. Problem was fixed by changing above to:
vec.erase(std::remove_if(vec.begin(), vec.end(), <lambda here>), vec.end());
But still question remains: how can
vec.erase(vec.end());
do any work? Shouldn't it be undefined behaviour?
Edit: Apparently my understanding of underfined behaviour was wrong from the beginning and what i observed was UB all along. Thank you everyone for answering my question.