```
template <InputIterator I1, Sentinel<I1> S1, InputIterator I2, Sentinel<I2> S2,
WeaklyIncrementable O, class Comp = less<>, class Proj1 = identity, class Proj2 = identity>
requires Mergeable<I1, I2, O, Comp, Proj1, Proj2>
O
set_intersection(I1 first1, S1 last1, I2 first2, S2 last2, O result,
Comp comp = Comp{}, Proj1 proj1 = Proj1{}, Proj2 proj2 = Proj2{});
template <InputRange Rng1, InputRange Rng2, WeaklyIncrementable O,
class Comp = less<>, class Proj1 = identity, class Proj2 = identity>
requires Mergeable<iterator_t<Rng1>, iterator_t<Rng2>, O, Comp, Proj1, Proj2>
O
set_intersection(Rng1&& rng1, Rng2&& rng2, O result,
Comp comp = Comp{}, Proj1 proj1 = Proj1{}, Proj2 proj2 = Proj2{});
```

*Effects:*
Constructs a sorted intersection of the elements from the two ranges;
that is, the set of elements that are present in both of the ranges.

*Requires:*
The resulting range shall not overlap with either of the original ranges.

*Returns:*
The end of the constructed range.

*Complexity:*
At most
2 * ((last1 - first1) + (last2 - first2)) - 1
applications of the comparison function and projections.

*Remarks:* If [first1,last1) contains m elements that are equivalent to
each other and [first2,last2) contains n elements that are equivalent
to them, the first min(m, n) elements shall be copied from the first range
to the output range, in order.