Subject: [Boost-bugs] [Boost C++ Libraries] #11609: circular_buffer erroneously invalidates reverse_iterator at pop_back in debug mode
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2015-09-01 15:50:34
#11609: circular_buffer erroneously invalidates reverse_iterator at pop_back in
debug mode
----------------------------------+------------------------------
Reporter: christian.stimming@⦠| Type: Bugs
Status: new | Milestone: To Be Determined
Component: None | Version: Boost 1.57.0
Severity: Problem | Keywords:
----------------------------------+------------------------------
The circular_buffer container offers reverse iterators. Using one so that
it points to the second-to-last element would in theory allow to
pop_back() the last element without causing problems with that iterator.
However, apparently pop_back() invalidates those reverse iterators even
though they wouldn't cause problems, as if the debug_iterator_registry in
boost/circular_buffer/debug.hpp is working correctly only for forward
iterators but not for backward iterators.
Example code that works fine without debug mode, but will run into a
failed assertion in debug mode:
#define BOOST_CB_ENABLE_DEBUG
#include <boost/circular_buffer.hpp>
#include <iostream>
int main(int /*argc*/, char** /*argv*/) {
typedef boost::circular_buffer<int> CircBuffer;
CircBuffer testBuffer(2);
testBuffer.push_back(4);
testBuffer.push_back(8);
CircBuffer::const_reverse_iterator bufIter = testBuffer.rbegin();
std::cout << "element at rbegin=" << *bufIter << std::endl; //
prints "=8" correctly
++bufIter;
std::cout << "element after ++=" << *bufIter << std::endl; //
prints "=4" correctly
testBuffer.pop_back();
std::cout << "elem=" << *bufIter << std::endl; // ERROR: Causes
"Assertion `is_valid(m_buff)' failed."
}
-- Ticket URL: <https://svn.boost.org/trac/boost/ticket/11609> Boost C++ Libraries <http://www.boost.org/> Boost provides free peer-reviewed portable C++ source libraries.
This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:18 UTC