in include/range/v3/algorithm/partition.hpp [52:73]
static I impl(I begin, S end, C pred_, P proj_, concepts::ForwardIterator*)
{
auto && pred = as_function(pred_);
auto && proj = as_function(proj_);
while(true)
{
if(begin == end)
return begin;
if(!pred(proj(*begin)))
break;
++begin;
}
for(I p = begin; ++p != end;)
{
if(pred(proj(*p)))
{
ranges::iter_swap(begin, p);
++begin;
}
}
return begin;
}