| Home | Libraries | People | FAQ | More

## Release Notes

### Boost 1.89 Release

- Fixed bugs/issues:
  - GitHub #250: "Custom container leads to invalid use of incomplete type for struct boost::container::dtl::container_rebind".

### Boost 1.88 Release

- Fixed bugs/issues:
  - GitHub #297: "flat_map::try_emplace does not compile if allocator has construct".
  - GitHub #234: "dlmalloc_ext_2_8_6.c:warning: iteration 2305843009213693951 invokes undefined behavior".

### Boost 1.87 Release

- Added `stored_size` option to `static_vector` and `small_vector`.
- Fixed bugs/issues:
  - GitHub #261: "End iterators are not dereferencable".
  - GitHub #288: "Compile error when using flat_map::extract_sequence with small_vector".
  - GitHub #295: "Bug in small_vector::swap".
  - GitHub #296: "flat_{set,map} does illegal things when confronted with duplicate values in initialization".

### Boost 1.86 Release

- Fixed bugs/issues:
  - GitHub #241: "flat_map should support same interface as std::map".
  - GitHub #245: "flat_tree::insert ordered range doesn't assert sorting".
  - GitHub #259: "Global variables".
  - GitHub #266: "small_vector<T> is misaligned on the stack in 32 bits".
  - GitHub #269: "flat_multimap::emplace not sorting elements under GCC".
  - GitHub #273: "flat_map/vector crashes on appends (memory corruption)".
  - GitHub #275: "Compilation fails if custom key comparison is used".
  - GitHub #277: "Remove dep on boost::static_assert".
  - GitHub #279: "small_vector cannot go back to use stack space".
  - GitHub #280: "Several containers don't support non-movable types when move assigning".
  - GitHub #285: "devector<>::push_front asserts after clear()".

### Boost 1.85 Release

- Removed Boost.StaticAssert dependency.
- Fixed bugs/issues:
  - GitHub #225: "variable set but not used in dlmalloc_ext_2_8_6.c".
  - GitHub #242: "Issue with string::rfind".

### Boost 1.83 Release

- Disabled forceinline for Clang due to code bloat issues, see Boost mailing list report
- Fixed bugs/issues:
  - GitHub #225: "variable set but not used in dlmalloc_ext_2_8_6.c".
  - GitHub #242: "Issue with string::rfind".

### Boost 1.82 Release

- Fixed bugs/issues:
  - GitHub #232: "Fix using pmr::polymorphic_allocator in pre-main".
  - GitHub #233: "Can't std::move small_vector with move-only type".
  - GitHub #238: "Containers should not be using memset to value-initialize POD types".
  - GitHub #236: "flat_tree::erase_unique uses wrong iterator".
  - GitHub #240: "_GLIBCXX_DEBUG detects issues in flat_set/map".

### Boost 1.81 Release

- `devector`'s insertion logic has been reimplemented to move elements to the center of the devector if an insertion at one end has no free capacity but there is free capacity on the other end. Current implementation keeps reallocating memory when only inserting at one end and poping from the other, provoking very high memory usage. The new strategy is based on the article Double-ended vector - is it useful? by Lars Greger Nordland Hagen.

### Boost 1.80 Release

- Fixed bugs/issues:
  - GitHub #209: "Some boost warnings with my R package (Wclass-memaccess warnings with std::pair)".
  - GitHub #211: "Use atomics for pmr get/set default resource".
  - GitHub #210: "Use sized delete in boost::container::new_allocator if __cpp_sized_deallocation is defined".
  - GitHub #218: "small_vector static capacity is too small when not a multiple of 8 bytes".
  - GitHub #221: "flat_set and friends should offer a const sequence_type& sequence() const method (...)".
  - GitHub #222: "Fix incomplete type error when using list with pair".
  - GitHub #223: "Possible copypaste typo".

### Boost 1.79 Release

- The library now compiles without warnings with GCC's -Wcast-align=strict
- Fixed bugs/issues:
  - GitHub #195: "vec_iterator member typedef iterator_concept should only be defined in C++20".
  - GitHub #199: "Apply LWG issue 3471 to memory_resource".
  - GitHub #204: "Inconsistent noexcept-ness of static_vector::reserve".
  - GitHub #206: "operator-> on static_vector::iterator causes cast alignment warning".
  - GitHub #207: "boost.vector doesn't work with common_iterator".
  - GitHub #214: "string is not properly null-terminated in assignments".

### Boost 1.78 Release

- Fixed bugs/issues:
  - GitHub #186: "Warnings out the wazoo".
  - GitHub #187: "flat_map::erase and unique keys".
  - GitHub #188: "Build fails when RTTI is disabled".
  - GitHub #192: "basic_string::clear() has poor codegen compared to STL implementations".
  - GitHub #197: "small_vector::swap causes spurious allocations and suboptimal performance".

### Boost 1.77 Release

- Fixed bugs/issues:
  - GitHub #150: "Use std::contiguous_iterator_tag if available".
  - GitHub #180: "polymorphic_allocator's copy special member functions are not noexcept".
  - GitHub #184: "Issues with custom exceptions implementation".
  - GitHub #185: "Including headers adds exports".

### Boost 1.76 Release

- Added [[no-discard]] attribute in all containers to catch bugs related to unused return values.
- Replaced default standard exception classes with Boost.Container own classes, reducing considerably the included files overhead. Example: in MSVC 19 `boost/container/vector.hpp` preprocessed file size reduces from 1,5MB to 930KB. If you still want to use standard exception classes, you can define `BOOST_CONTAINER_USE_STD_EXCEPTIONS` before using any Boost.Container class.
- Fixed bugs/issues:
  - GitHub #102: "flat_map::insert ambiguous with initializer list & pairs that need to convert".
  - GitHub #139: "flat_map merge and iterators".
  - GitHub #141: "small_vector does not propagate no throw properties of move operation of contained type".
  - GitHub #164: "Compile error when using `pmr::map` with a `std::pair`; works when using a `std::tuple`".
  - GitHub #171: "deque::clear() uses undefined behaviour".

### Boost 1.75 Release

- New `devector` container.
- Fixed bugs/issues:
  - GitHub #152: "Tree-based containers have troubles with move-only types".
  - GitHub #156: "Compile error with vector".
  - GitHub #157: "Add missing include".
  - GitHub #159: "pmr::monotonic_buffer_resource crashes on large single allocations".
  - GitHub #160: "Usage of uses_allocator needs a remove_cvref_t".
  - GitHub #162: "small_vector on MSVC x86 call-by-value crash".
  - GitHub #161: "polymorphic_allocator(memory_resource*) non-standard extension causes headache".
  - GitHub #163: "container_rebind for small_vector with options".
  - GitHub #165: "Link error with shared library and memory_resource inline members".
  - GitHub #166: "Fix encoding error in copyright headers".
  - GitHub #167: "error: the address of 'msg' will always evaluate as 'true' warning with GCC 4.4".
  - GitHub #169: "flood of warnings building dlmalloc_ext_2_8_6.c on clang11".

### Boost 1.74 Release

- Fixed bugs/issues:
  - GitHub #125: "flat_map doc misleading complexity".
  - GitHub #126: "flat_set.hpp and set.hpp in pmr have the same header guard".
  - GitHub #128: "moved from small_vector and static_vector calls destructor on elements in static part".
  - GitHub #129: "Alias templates for small_flat_[multi]{set|map} using small_vector as container".
  - GitHub #135: "Missing BOOST_NORETURN for user defined functions".
  - GitHub #137: "RandomAccessIterator + 0".
  - GitHub #138: "Remove Classes from Global Namespace".
  - GitHub #142: "memset called with null pointer".
  - GitHub #144: "GCC suggest-override warnings".
  - GitHub #145: "Allocations not handled correctly in some cases of vector move with unequal allocators".
  - GitHub #146: "Changes for Embarcadero C++ clang-based compilers, targeting Boost 1.74. Addition needed for Embarcardero clang-based compilers".
  - GitHub #148: "Fix static initialization issues in pmr global resources".
  - GitHub #149: "InitializeCriticalSectionEx returns "BOOL" (int)".
  - GitHub #151: "Buffer overflow in monotonic_buffer_resource::do_allocate".

### Boost 1.72 Release

- Fixed bugs:
  - GitHub #127: "Fix docs for static_vector::max_size() and capacity()".
  - GitHub #132: "flat_map::lower_bound and upper_bound have wrong/misleading docs".
  - GitHub #133: "basic_string move constructor with allocator argument has incorrect allocator check".

### Boost 1.71 Release

- Fixed bugs:
  - GitHub #47: "added alignment specification for small_vector".
  - GitHub #88: "Implement C++17 MoveAssignable requirements for self-move assignments".
  - GitHub #107: "Alignment ignored in resource_adaptor".
  - GitHub #109: "Get rid of integer overflow in copy_move_algo.hpp (-fsanitize=integer)".
  - GitHub #110: "Avoid gcc 9 deprecated copy warnings in new_allocator.hpp".
  - GitHub #112: "vector::resize() compilation error with msvc-10..12: data is not a member of boost::detail::aligned_storage".
  - GitHub #114: "Fix small_vector noexcept specification".
  - GitHub #116: "MSVC + boost 1.70 compilation error when windows.h is already included (detail/thread_mutex.hpp)".
  - GitHub #117: "flat_map/map::insert_or_assign with hint has wrong return types".
  - GitHub #118: "Non-unique inplace_set_difference used in in flat_tree_merge_unique and iterator invalidation in insert_unique".
  - GitHub #122: "Fix has_trivial_destructor_after_move".
  - GitHub #123: "With heterogeneous lookup, `equal_range` can result in a range with length greater than 1".
- `deque` can now have options, using `deque_options`. The block size/bytes can be be specified.
- `static_vector` can now have options, using `static_vector_options`. Alignment and throwing behaviour can be be specified.
- `small_vector` can now have options, using `small_vector_options`. Alignment and growth factor can be be specified.

### Boost 1.70 Release

- Removed support for already deprecated GCC < 4.3 and MSVC < 9.0 (Visual 2008) compilers.
- Default allocator parameter changed form `new_allocator<T>` to `void` to reduce symbol lenghts.
- Fixed bugs:
  - GitHub #96: "Workaround: Intel compilers do not offer CTAD yet".
  - GitHub #97: "buffer overflow in boost::container::flat_map on FreeBSD".
  - GitHub #98: "flat_map: insert_or_assign does not work with hint".
  - GitHub #100: "Compile error on Green Hills: container_detail::flat_tree has no member insert".
  - GitHub #103: "Fix deallocating never-allocated storage in vector.merge()".
  - GitHub #104: "Fix -Wmissing-noreturn clang warnings".
  - GitHub #105: "Fix gcc -Wdeprecated-copy".
  - GitHub #111: "container::vector of interprocess::offset_ptrs to variants holding incomplete type".

### Boost 1.69 Release

- Deprecated GCC < 4.3 and MSVC < 9.0 (Visual 2008) compilers.
- Implemented C++20 `contains()` for associative containers as specified in P0458R2: Checking for Existence of an Element in Associative Containers.
- Fixed serious bug in heterogeneous lookup functions (is_transparent was broken).
- Fixed bugs:
  - GitHub #77: "warning: 'sbrk' is deprecated".
  - GitHub #79: "Mark small_vector move operations noexcept".
  - GitHub #80: "flat_map deduction guides are ambiguous".
  - GitHub #81: "Vector with custom allocator does not support value types with operator&".
  - GitHub #82: "Function definition in header file".
  - GitHub #83: "Iterator zero incrementing leads to assert on empty vector".
  - GitHub #84: "Allow vector to be assigned to itself".
  - GitHub #85: "container: misc-typos".
  - GitHub #86: "Add missing warning re-enabling include".
  - GitHub #89: "UBSAN failures detected in preflight CI PR".
  - GitHub #90: "Build fails on clang-5 with libstdc++7-dev (C++17 issue)".
  - GitHub #93: "vector::erase memory leak".

### Boost 1.68 Release

- Improved correctness of `adaptive_pool` and many parameters are now compile-time constants instead of runtime constants.
- Implemented C++14's heterogeneous lookup functions for `[multi]map/[multi]set/flat_[multi]map/flat_[multi]set`.
- Added GitHub #71: "Constructor Template Auto Deduction guides ".
- Fixed bugs:
  - Trac #13533: "Boost vector resize causes assert(false)".
  - GitHub #73: "triviality of pair".
  - GitHub #74: "vector assignment not using memcpy".
  - GitHub #75: "flat_set: Heap overflow".
  - GitHub #76: "flat_set: undefined behaviour on empty range".
  - Fixed race condition bug in `unsynchronized_pool_resource` found by Arthur O'Dowyer in his blog post <memory_resource> for libc++
- Implemented proposed resolution for "LWG 3120 Unclear behavior of monotonic_buffer_resource::release()". After `release()` the original buffer is recovered for the next allocation.

### Boost 1.67 Release

- vector can now have options, using `vector_options`. The growth factor and the stored size type can be specified.
- Improved range insertion in flat_[multi]map/set containers overall complexity is reduced to O(NlogN).
- Fixed bugs:
  - GitHub #61: "Compile problems on Android ndk r16 beta 1".
  - GitHub #64: "Fix splice for slist".
  - GitHub #65: "`pmr::monotonic_buffer_resource::allocate()` can return a pointer to freed memory after `release()` is called".
  - Trac #13500: "Memory leak when using erase on string vectors".

### Boost 1.66 Release

- flat_[multi]map/set can now work as container adaptors, as proposed in P0429R1. The allocator argument is checked for size() and empty() members. If so, the argument is interpreted as the required underlying container. This means that static_vector, stable_vector and small_vector can be used now with flat associative containers.
- Fixed bugs:
  - GitHub #54: "no sbrk() in VxWorks, configure dlmalloc to use only mmap".
  - GitHub #58: "Comparing strings does not compile in gcc 7+ in C++17 mode".
  - GitHub #59: "basic_string::npos is missing its definition".

### Boost 1.65 Release

- Implemented `extract_sequence`, `adopt_sequence` functions for flat_[multi]map/set associative containers.
- Fixed bugs:
  - GitHub #48: "Replace deprecated/removed C++98 binders".
  - GitHub #49: "Remove useless allocator copy in map".
  - GitHub #50: "Fixed bug Trac #13038 (base64 iterators can't be used with iterator_advance)".
  - GitHub #51: "Fix integer rollover that triggers clang ubsan when U is unsigned".

### Boost 1.64 Release

- Fixed bugs:
  - Trac #11333: "boost::basic_string_ref should interop with boost::container::basic_string".
  - Trac #12749: "container::pmr::polymorphic_allocator compilation error".
  - Trac #12915: "Buffer overflow in boost::container::vector (affects flat_set)".
  - GitHub #45: "emplace_back must return reference to back(), not to *end()".
  - GitHub #46: "Fix use of propagate_on_container_swap".

### Boost 1.63 Release

- Fixed bugs:
  - Trac #12534: "flat_map fails to compile if included after type_traits is instantiated under gcc".
  - Trac #12577: "Null reference in pair.hpp triggers runtime warning with -fsanitize=undefined".
  - GitHub #40: Fix parameter types in copy_move_algo.hpp: iterator_traits::difference_type -> allocator_traits::size_type.
  - GitHub #41: Avoid -Wunreachable-code in do_allocate().

### Boost 1.62 Release

- Fixed bugs:
  - Trac #9481: "Minor comment typo in Boost.Container".
  - Trac #9689: "Add piecewise_construct to boost::container".
  - Trac #11170: "Doc slip for index_of".
  - Trac #11802: "Incorrect ordering after using insert() with ordered_range_t on a flat_multiset with a non-default sort order".
  - Trac #12117: "flat_set constructor with ordered_unique_range".
  - Trac #12177: "vector::priv_merge uses unqualified uintptr_t".
  - Trac #12183: "GCC 6.1 thinks boost::container::string violates strict aliasing".
  - Trac #12256: "set<std::pair<int,int>>::insert cause compilation error in debug configuration in Visual Studio 2012".
  - Trac #12273: "static_vector max_size() and capacity() should be constant expressions". Added constant `static_vector<>::static_capacity` to use the configured capacity in constant expressions.
  - Trac #12286: "PMR flat_map from Boost Container does not compile".
  - Trac #12296: "{deque,string} combine for a memory leak".
  - Trac #12319: "flat_set` should be nothrow move constructible".
- Revised noexcept expressions of default and move constructors in all containers.
- Implemented C++17's `insert_or_assign`/`try_emplace` for `map` and `flat_map`.
- Implemented C++17's Splicing Maps and Sets (Revision 5) for `map`, `multimap`, `set`, `multiset`.
- Implemented C++17's P0084R2 Emplace Return Type in `deque`, `vector`, `stable_vector`, `small_vector`, `static_vector`, `list` and `slist`.

### Boost 1.61 Release

- `boost::container::small_vector` supports more constructors and assignments.
- Fixed bugs:
  - Trac #11820: "compiler error when using operator[] of map".
  - Trac #11856: "pool_resource.cpp error: declaration changes meaning".
  - Trac #11866: "small_vector does not have range constructor".
  - Trac #11867: "small_vector should have constructor and assignment operator taking other small_vector".
  - Trac #11912: "flat_map use of vector::priv_forward_range_insert_expand_backwards may cause move with same source".
  - Trac #11957: "static_vector::max_size() is higher than the capacity".
  - Trac #12014: "boost::container::set can not insert const (ref) range".
  - GitHub #33: Make sure std::string constructor is available.

### Boost 1.60 Release

- Implemented Polymorphic Memory Resources.
- Add more BOOST_ASSERT checks to test preconditions in some operations (like `pop_back`, `pop_front`, `back`, `front`, etc.)
- Added C++11 `back`/`front` operations to `basic_string`.
- Fixed bugs:
  - Trac #11627: "small_vector<T,n>::swap() appears to be broken".
  - Trac #11628: "small_vector<int,n> iterates over elements in destructor".
  - Trac #11697: "Wrong initialization order in tuple copy-constructor".
  - Trac #11698: "Missing return statement in static_storage_allocator".
  - GitHub #29: Doc fixes for flap_map complexity requirements.
  - GitHub #31: DL_SIZE_IMPL also dereference addr.

### Boost 1.59 Release

- GitHub #26: Fix bug in stable_vector::capacity(). Thanks to timsong-cpp/Arindam Mukerjee.
- GitHub #27: fix stable_vector's index_of's doxygen comment. Thanks to kariya-mitsuru.
- Trac #11380: "Container library std forward declarations incorrect in std_fwd.hpp on libc++ with gcc".
- Trac #11388: "boost::container::list::emplace_back broken on Visual Studio 2010".
- Trac #11339: "VC12 LNK2005 error with boost::container::adaptive_pool".

### Boost 1.58 Release

- Experimental `small_vector` container.
- Massive dependency reorganization. Now Boost.Container depends on very basic utilities like Boost.Core and Boost.Intrusive. Preprocessed code size have decreased considerably and compilation times have improved.
- Added `nth` and `index_of` functions to containers with random-access iterators (except `basic_string`).
- Added C++17's `allocator_traits<Allocator>::is_always_equal`.
- Updated containers to implement new constructors as specified in 2210. Missing allocator-extended constructor for allocator-aware containers.
- Fixed bugs:
  - Trac #9931: "flat_map::insert(ordered_unique_range_t...) fails with move_iterators" (reopened).
  - Trac #11076: "Unqualified calls to memmove/memcpy in container/detail/copy_move_algo.hpp".
  - Trac #10790 ("long long errors from container").
  - Trac #10808 ("compare equal operator of vector is broken").
  - Trac #10930 ("container std_fwd.hpp neglects custom std namespaces").
  - Trac #11139 ("boost::container::vector<std::shared_ptr<const T>...>::const_iterator allows changing dereferenced elements").
- Source Breaking: `scoped_allocator_adaptor`'s `propagate_on_container_copy_assignment`, `propagate_on_container_move_assignment` and `propagate_on_container_swap` are no longer `::boost::integral_constant<bool, true/false>` types. The dependency reorganization needed to break with those classes to avoid MPL dependencies, and interoperability with `std::integral_constant` was not guaranteed. Code assumming `boost::true_type/boost::false_type` on this will not compile. As a workaround, use the guaranteed internal `::value` constant: `::boost::integral_constant<bool, scoped_allocator_adaptor<Allocator>::propagate_on_container_move_assignment::value>`.

### Boost 1.57 Release

- Added support for `initializer_list`. Contributed by Robert Matusewicz.
- Fixed double destruction bugs in vector and backward expansion capable allocators.
- Fixed bugs:
  - Trac #10263 ("AIX 6.1 bug with sched_yield() function out of scope").
  - GitHub #16: Fix iterators of incomplete type containers. Thanks to Mikael Persson.

### Boost 1.56 Release

- Added DlMalloc-based Extended Allocators.
- Improved configurability of tree-based ordered associative containers. AVL, Scapegoat and Splay trees are now available to implement `set`, `multiset`, `map` and `multimap`.
- Fixed bugs:
  - #9338: "VS2005 compiler errors in swap() definition after including container/memory_util.hpp".
  - #9637: "Boost.Container vector::resize() performance issue".
  - #9648: "string construction optimization - char_traits::copy could be used ...".
  - #9801: "I can no longer create and iterator_range from a stable_vector".
  - #9915: "Documentation issues regarding vector constructors and resize methods - value/default initialization".
  - #9916: "Allocator propagation incorrect in the assignment operator of most".
  - #9931: "flat_map::insert(ordered_unique_range_t...) fails with move_iterators".
  - #9955: "Using memcpy with overlapped buffers in vector".

### Boost 1.55 Release

- Implemented SCARY iterators.
- Fixed bugs #8269, #8473, #8892, #9009, #9064, #9092, #9108, #9166.
- Added `default initialization` insertion functions to vector-like containers with new overloads taking `default_init_t` as an argument instead of `const value_type &`.

### Boost 1.54 Release

- Added experimental `static_vector` class, based on Andrew Hundt's and Adam Wulkiewicz's high performance `varray` class.
- Speed improvements in `vector` constructors/copy/move/swap, dispatching to memcpy when possible.
- Support for `BOOST_NO_EXCEPTIONS` #7227.
- Fixed bugs #7921, #7969, #8118, #8294, #8553, #8724.

### Boost 1.53 Release

- Fixed bug #7650.
- Improved `vector`'s insertion performance.
- Changed again experimental multiallocation interface for better performance (still experimental).
- Added no exception support for those willing to disable exceptions in their compilers.
- Fixed GCC -Wshadow warnings.
- Replaced deprecated BOOST_NO_XXXX with newer BOOST_NO_CXX11_XXX macros.

### Boost 1.52 Release

- Improved `stable_vector`'s template code bloat and type safety.
- Changed typedefs and reordered functions of sequence containers to improve doxygen documentation.
- Fixed bugs #6615, #7139, #7215, #7232, #7269, #7439.
- Implemented LWG Issue #149 (range insertion now returns an iterator) & cleaned up insertion code in most containers
- Corrected aliasing errors.

### Boost 1.51 Release

- Fixed bugs #6763, #6803, #7114, #7103. #7123,

### Boost 1.50 Release

- Added Scoped Allocator Model support.
- Fixed bugs #6606, #6533, #6536, #6566, #6575,

### Boost 1.49 Release

- Fixed bugs #6540, #6499, #6336, #6335, #6287, #6205, #4383.
- Added `allocator_traits` support for both C++11 and C++03 compilers through an internal `allocator_traits` clone.

### Boost 1.48 Release

- First release. Container code from Boost.Interprocess was deleted and redirected to Boost.Container via using directives.