При более подходящих именах, таких как «IsOldResult» или «ResultOlderThan», я бы сказал, что окончательное решение будет наиболее читабельным, поскольку именно оно больше всего подходит для прозы:
results.remove_if(ResultOlderThan(lifetime));
Однако я бы, вероятно, пошел бы и написал функтор только в том случае, если алгоритм, который он представлял, работал в нескольких контекстах. Мне кажется, что написание 5-строчного класса, который физически удаляется из одного однострочного сайта вызовов, чересчур расточительно.
В противном случае опция boost :: bind имеет мой голос, поскольку между ним и std :: bind2nd (как минимум, _1 и std :: mem_fun_ref соответственно) меньше всего пуха. Кроме того, boost :: bind работает в большинстве случаев, например, в случае, когда вы не привязываете только одну переменную функции, имеющую только два параметра.