Opened 15 years ago

Closed 15 years ago

#1692 closed Bugs (fixed)

'iterator::m_it' declared public ONLY in test/debug-build, but always accessed from 'cicular_buffer::erase()'

Reported by: Tobi.Winkler@… Owned by: Jan Gaspar
Milestone: To Be Determined Component: circular_buffer
Version: Boost Development Trunk Severity: Showstopper
Keywords: Cc:

Description

In the current version of boost::circular_buffer, there is a small bug where iterator::m_it is declared private if not in test-mode (explains why this didn't get caught) but accessed from circular_buffer::erase(iterator, iterator) even in non-debug/non-test mode. This just causes a compiler error.

(I think just adding

template <class T, class Alloc> friend class circular_buffer;

should be enough.

)


/boost/boost/circular_buffer/details.hpp (r1.4)
           class iterator
222 #if !defined(BOOST_CB_TEST) && !BOOST_CB_ENABLE_DEBUG
223 private:
224 #endif
225 // Member variables
226 
227     //! The circular buffer where the iterator points to.
228     const Buff* m_buff;
229 
230     //! An internal iterator.
231     pointer m_it;

---

/boost/boost/circular_buffer/base.hpp (r1.8)
           circular_buffer::erase(iterator, iterator)
1717         pointer next = pos.m_it;

Change History (3)

comment:1 by Jan Gaspar, 15 years ago

Severity: ProblemShowstopper

comment:2 by Jan Gaspar, 15 years ago

Status: newassigned

Several more methods are affected, not only erase().

I would fix it by declaring the members as public - friend does not work for all compilers in this case.

comment:3 by Jan Gaspar, 15 years ago

Resolution: fixed
Status: assignedclosed
Note: See TracTickets for help on using tickets.