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.2.4 replace_copy_if
19
20// { dg-do compile }
21
22#include <algorithm>
23#include <testsuite_iterators.h>
24
25using __gnu_test::input_iterator_wrapper;
26using __gnu_test::output_iterator_wrapper;
27
28struct X { };
29
30struct Y { };
31
32struct Z
33{
34  Z&
35  operator=(const X&)
36  { return *this; }
37
38  Z&
39  operator=(const Y&)
40  { return *this; }
41};
42
43bool
44predicate(const X&)
45{ return true; }
46
47output_iterator_wrapper<Z>
48test1(input_iterator_wrapper<X>& begin,
49      input_iterator_wrapper<X>& end,
50      output_iterator_wrapper<Z>& output,
51      const Y& new_val)
52{
53  return std::replace_copy_if(begin, end, output, predicate,
54			      new_val);
55}
56