2007-01-24 Steve LoBasso Paolo Carlini * include/bits/deque.tcc (deque<>::erase(iterator, iterator)): Fix condition. * testsuite/23_containers/deque/modifiers/erase/3.cc: New. --- libstdc++-v3/include/bits/deque.tcc (revision 121146) +++ libstdc++-v3/include/bits/deque.tcc (revision 121147) @@ -140,7 +140,7 @@ namespace _GLIBCXX_STD { const difference_type __n = __last - __first; const difference_type __elems_before = __first - this->_M_impl._M_start; - if (static_cast(__elems_before) < (size() - __n) / 2) + if (static_cast(__elems_before) <= (size() - __n) / 2) { std::copy_backward(this->_M_impl._M_start, __first, __last); iterator __new_start = this->_M_impl._M_start + __n; --- libstdc++-v3/testsuite/23_containers/deque/modifiers/erase/3.cc (revision 0) +++ libstdc++-v3/testsuite/23_containers/deque/modifiers/erase/3.cc (revision 121147) @@ -0,0 +1,52 @@ +// Copyright (C) 2007 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, +// USA. + +// 23.2.1.3 deque modifiers + +#include +#include + +void erase(size_t num_elm, size_t elm_strt, size_t elm_end) +{ + bool test __attribute__((unused)) = true; + using __gnu_test::copy_tracker; + using __gnu_test::assignment_operator; + + std::deque x(num_elm); + copy_tracker::reset(); + + x.erase(x.begin() + elm_strt, x.begin() + elm_end); + + const size_t min_num_cpy = std::min(elm_strt, num_elm - elm_end); + VERIFY( assignment_operator::count() == min_num_cpy ); +} + +// http://gcc.gnu.org/ml/libstdc++/2007-01/msg00098.html +void test01() +{ + for (size_t num_elm = 0; num_elm <= 10; ++num_elm) + for (size_t elm_strt = 0; elm_strt <= num_elm; ++elm_strt) + for (size_t elm_end = elm_strt; elm_end <= num_elm; ++elm_end) + erase(num_elm, elm_strt, elm_end); +} + +int main() +{ + test01(); + return 0; +}