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