1// { dg-options "-std=gnu++11" } 2 3// Copyright (C) 2005-2015 Free Software Foundation, Inc. 4// 5// This file is part of the GNU ISO C++ Library. This library is free 6// software; you can redistribute it and/or modify it under the 7// terms of the GNU General Public License as published by the 8// Free Software Foundation; either version 3, or (at your option) 9// any later version. 10 11// This library is distributed in the hope that it will be useful, 12// but WITHOUT ANY WARRANTY; without even the implied warranty of 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14// GNU General Public License for more details. 15 16// You should have received a copy of the GNU General Public License along 17// with this library; see the file COPYING3. If not see 18// <http://www.gnu.org/licenses/>. 19 20// 25.2.4 remove 21 22#undef _GLIBCXX_CONCEPT_CHECKS 23 24#include <algorithm> 25#include <testsuite_hooks.h> 26#include <testsuite_iterators.h> 27#include <testsuite_rvalref.h> 28 29using __gnu_test::test_container; 30using __gnu_test::forward_iterator_wrapper; 31using __gnu_test::rvalstruct; 32 33typedef test_container<rvalstruct, forward_iterator_wrapper> Container; 34 35bool equal1(rvalstruct& in) { return in.val == 1; } 36bool equal0(rvalstruct& in) { return in.val == 0; } 37 38void 39test1() 40{ 41 int intarray[] = {1}; 42 rvalstruct array[1]; 43 std::copy(intarray, intarray + 1, array); 44 Container con(array, array + 1); 45 VERIFY(std::remove_if(con.begin(), con.end(), equal0).ptr == array + 1); 46 VERIFY(std::remove_if(con.begin(), con.end(), equal1).ptr == array); 47} 48 49void 50test2() 51{ 52 int intarray[] = {0, 1, 0, 1, 0, 0, 1, 1}; 53 rvalstruct array[8]; 54 std::copy(intarray, intarray + 8, array); 55 Container con(array, array + 8); 56 VERIFY(std::remove_if(con.begin(), con.end(), equal1).ptr == array + 4); 57 VERIFY(array[0] == 0 && array[1] == 0 && array[2] == 0 && 58 array[3] == 0); 59} 60 61int 62main() 63{ 64 test1(); 65 test2(); 66} 67