32 template(
typename I,
typename C,
typename P =
identity)(
35 constexpr I operator()(I first,
36 iter_difference_t<I> d,
45 auto middle = next(uncounted(first), half);
46 if(invoke(pred, invoke(proj, *middle)))
48 first = recounted(first, std::move(++middle), half + 1);