Roland wrote:
Hello all (Hi Ion)
Here's a small piece of code that causes an exception to be thrown (when it shouldn't). The environment is MSVC8 (VS2005SP1) with Boost 1.37. The code is an adaption of one of the samples in the interprocess documentation.
Thanks for the report. It's a bug. To fix the bug you should modify the local copy of list.hpp. As you see there is no protection against an empty range insertion: template<class FwdIterator> void priv_create_and_insert_nodes (const_iterator pos, FwdIterator beg, FwdIterator end, allocator_v2, std::forward_iterator_tag) { //Optimized allocation and construction this->allocate_many_and_construct (beg, std::distance(beg, end), insertion_functor(this->icont(), pos.get())); } } add a test to avoid this: template<class FwdIterator> void priv_create_and_insert_nodes (const_iterator pos, FwdIterator beg, FwdIterator end, allocator_v2, std::forward_iterator_tag) { if(beg != end){ //Optimized allocation and construction this->allocate_many_and_construct (beg, std::distance(beg, end), insertion_functor (this->icont(), pos.get())); } } Commited to SVN, revision 49871. Regards, Ion