| 78 | |
| 79 | template <typename T, typename Predicate> |
| 80 | std::vector<T> FilterVector(std::vector<T> values, Predicate&& predicate) { |
| 81 | auto new_end = std::remove_if(values.begin(), values.end(), |
| 82 | [&](const T& value) { return !predicate(value); }); |
| 83 | values.erase(new_end, values.end()); |
| 84 | return values; |
| 85 | } |
| 86 | |
| 87 | template <typename Fn, typename From, |
| 88 | typename To = decltype(std::declval<Fn>()(std::declval<From>()))> |