Ve skutečnosti samozřejmě filter už ve standardní knihovně dávno je. Jmenuje se remove_copy_if, pozor na to, že má obráceně podmínku (kopíruje tedy ty, pro které isEven vrátí false):
list res;
remove_copy_if(l.begin(), l.end(), back_inserter(res), isEven);
printList(res, "Filtered list");
Bohužel, omylem ze standardu vypadlo copy_if, které by neobracelo podmínku, ale to snad není velký problém.