Certo che si può semplificare ulteriormente! Scrivi una bella funzione che accetti un puntatore a funzione così se lo devi rifare non sei costretto a riscrivere tutto!
(che peraltro significa di fatto implementarsi la std::remove_if )
Amaro C++, il gusto pieno dell'undefined behavior.