```
template<class InputIterator1, class InputIterator2,
class OutputIterator>
OutputIterator
set_union(InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result);
template<class InputIterator1, class InputIterator2,
class OutputIterator, class Compare>
OutputIterator
set_union(InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result, Compare comp);
```

*Effects:*
Constructs a sorted union of the elements from the two ranges;
that is, the set of elements that are present in one or 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
comparisons.

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