41 template(
typename I,
typename V,
typename R =
less,
typename P =
identity)(
45 iter_difference_t<I> dist,
55 auto middle = ranges::next(first, half);
57 auto && pv = invoke(proj, (
decltype(v) &&)v);
58 if(invoke(pred, pv, val))
60 first = std::move(++middle);
63 else if(invoke(pred, val, pv))
69 return {lower_bound_n(std::move(first),
74 upper_bound_n(ranges::next(middle),
82 return {first, first};