Ticket #9334: circular_buffer.patch

File circular_buffer.patch, 2.9 KB (added by saleyn@…, 9 years ago)

Patch that fixes reported issue with circular buffer

  • boost/circular_buffer/base.hpp

    old new  
    690690                        break;
    691691                    }
    692692                    if (is_uninitialized(dest)) {
    693                         ::new (dest) value_type(this_type::move_if_noexcept(*src));
     693                        m_alloc.construct(dest, this_type::move_if_noexcept(*src));
    694694                        ++constructed;
    695695                    } else {
    696696                        value_type tmp = this_type::move_if_noexcept(*src);
     
    14671467            increment(m_last);
    14681468            m_first = m_last;
    14691469        } else {
    1470             ::new (m_last) value_type(static_cast<ValT>(item));
     1470            m_alloc.construct(m_last, static_cast<ValT>(item));
    14711471            increment(m_last);
    14721472            ++m_size;
    14731473        }       
     
    14841484                m_last = m_first;
    14851485            } else {
    14861486                decrement(m_first);
    1487                 ::new (m_first) value_type(static_cast<ValT>(item));
     1487                m_alloc.construct(m_first, static_cast<ValT>(item));
    14881488                ++m_size;
    14891489            }
    14901490        } BOOST_CATCH(...) {
     
    24592459    */
    24602460    void construct_or_replace(bool construct, pointer pos, param_value_type item) {
    24612461        if (construct)
    2462             ::new (pos) value_type(item);
     2462            m_alloc.construct(pos, item);
    24632463        else
    24642464            replace(pos, item);
    24652465    }
     
    24712471    */
    24722472    void construct_or_replace(bool construct, pointer pos, rvalue_type item) {
    24732473        if (construct)
    2474             ::new (pos) value_type(boost::move(item));
     2474            m_alloc.construct(pos, boost::move(item));
    24752475        else
    24762476            replace(pos, boost::move(item));
    24772477    }
     
    26112611        if (buffer_capacity == 0)
    26122612            return;
    26132613        while (first != last && !full()) {
    2614             ::new (m_last) value_type(*first++);
     2614            m_alloc.construct(m_last, *first++);
    26152615            increment(m_last);
    26162616            ++m_size;
    26172617        }
     
    28812881            pointer p = m_last;
    28822882            BOOST_TRY {
    28832883                for (; ii < construct; ++ii, increment(p))
    2884                     ::new (p) value_type(*wrapper());
     2884                    m_alloc.construct(p, *wrapper());
    28852885                for (;ii < n; ++ii, increment(p))
    28862886                    replace(p, *wrapper());
    28872887            } BOOST_CATCH(...) {
     
    29752975                for (;ii > construct; --ii, increment(p))
    29762976                    replace(p, *wrapper());
    29772977                for (; ii > 0; --ii, increment(p))
    2978                     ::new (p) value_type(*wrapper());
     2978                    m_alloc.construct(p, *wrapper());
    29792979            } BOOST_CATCH(...) {
    29802980                size_type constructed = ii < construct ? construct - ii : 0;
    29812981                m_last = add(m_last, constructed);