1c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow//===----------------------------------------------------------------------===//
2c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow//
3c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow//                     The LLVM Compiler Infrastructure
4c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow//
5c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow// This file is dual licensed under the MIT and the University of Illinois Open
6c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow// Source Licenses. See LICENSE.TXT for details.
7c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow//
8c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow//===----------------------------------------------------------------------===//
9c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow
10c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow// <algorithm>
11c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow
12c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow// template<InputIterator InIter1, InputIterator InIter2, typename OutIter,
13c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow//          CopyConstructible Compare>
14c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow//   requires OutputIterator<OutIter, InIter1::reference>
15c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow//         && OutputIterator<OutIter, InIter2::reference>
16c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow//         && Predicate<Compare, InIter1::value_type, InIter2::value_type>
17c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow//         && Predicate<Compare, InIter2::value_type, InIter1::value_type>
18c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow//   OutIter
19c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow//   set_union(InIter1 first1, InIter1 last1, InIter2 first2, InIter2 last2,
20c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow//             OutIter result, Compare comp);
21c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow
223b8f03d964f47d4ca71bbf1d47f11a494c646488Marshall Clow// UNSUPPORTED: c++98, c++03
233b8f03d964f47d4ca71bbf1d47f11a494c646488Marshall Clow
24c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow#include <algorithm>
25c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow#include <cassert>
26c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow#include <iterator>
27c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow#include <vector>
28c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow
29c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow#include "MoveOnly.h"
30c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow
31c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow
32c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clowint main()
33c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow{
34c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow    std::vector<MoveOnly> lhs, rhs;
35c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow    lhs.push_back(MoveOnly(2));
36c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow    rhs.push_back(MoveOnly(2));
37c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow
38c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow    std::vector<MoveOnly> res;
39c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow    std::set_union(std::make_move_iterator(lhs.begin()),
40c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow                   std::make_move_iterator(lhs.end()),
41c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow                   std::make_move_iterator(rhs.begin()),
42c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow                   std::make_move_iterator(rhs.end()), std::back_inserter(res));
43c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow
44c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow    assert(res.size() == 1);
45c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow    assert(res[0].get() == 2);
46c3fa9655a4cc1ddaf521e9ca51d2b8c855f649e5Marshall Clow}
47