1// Copyright (C) 2005-2015 Free Software Foundation, Inc. 2// 3// This file is part of the GNU ISO C++ Library. This library is free 4// software; you can redistribute it and/or modify it under the 5// terms of the GNU General Public License as published by the 6// Free Software Foundation; either version 3, or (at your option) 7// any later version. 8 9// This library is distributed in the hope that it will be useful, 10// but WITHOUT ANY WARRANTY; without even the implied warranty of 11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12// GNU General Public License for more details. 13 14// You should have received a copy of the GNU General Public License along 15// with this library; see the file COPYING3. If not see 16// <http://www.gnu.org/licenses/>. 17 18// 25.3.1.4 [lib.partial.sort.copy] 19 20// { dg-do compile } 21 22#include <algorithm> 23#include <testsuite_iterators.h> 24 25using __gnu_test::input_iterator_wrapper; 26using __gnu_test::random_access_iterator_wrapper; 27 28struct S1 { }; 29struct S2 30{ 31 S2(const S1&) {} 32 S2() {} 33}; 34 35bool 36operator<(const S1&, const S1&) 37{return true;} 38 39bool 40operator<(const S2&, const S2&) 41{return true;} 42 43struct X1 { }; 44struct X2 45{ 46 X2(const X1&) {} 47 X2() {} 48}; 49 50struct predicate 51{ 52 bool 53 operator()(const X1&, const X1&) 54 {return true;} 55 56 bool 57 operator()(const X2&, const X2&) 58 {return true;} 59}; 60 61random_access_iterator_wrapper<S2> 62test1(input_iterator_wrapper<S1>& s1, random_access_iterator_wrapper<S2>& s2) 63{ return std::partial_sort_copy(s1, s1, s2, s2); } 64 65random_access_iterator_wrapper<X2> 66test2(input_iterator_wrapper<X1>& x1, random_access_iterator_wrapper<X2>& x2) 67{ return std::partial_sort_copy(x1, x1, x2, x2, predicate()); } 68