I haven't used std::remove_if before, but based on the docs you shouldn't need the erase part.
std::remove_if does the erase internally, then typically returns the end() iterator. That means the erase is going to be trying to erase starting at the end() (which isn't a valid element), so the last element will have trouble.
Try this instead (same code but with erase taken out):
std::remove_if(enemies1.begin(), enemies1.end(), [](const auto &itr) {return itr->touch; });