| Home | Libraries | People | FAQ | More

## Release Notes

### Boost 1.91 Release

- Hooks and containers using `normal_link`s now have defaulted destructors if C++20 concepts are available. This allows trivially destructible hooks and containers if internally used nodes and comparison objects are trivially destructible.
- Hooks using `normal_link`s now have defaulted constructors if C++20 concepts are available. This allows trivially default constructible hooks if internally used nodes are trivially destructible.
- Updated `list` and `slist` member `remove_xx` and `unique_xxx` methods to return the number of removed elements, following C++20 changes to `std::list`.
- Fixed bugs:
  - GitHub #92: some intrusive containers are not trivially destructible when possible
  - GitHub #103: C++17: compilation errors if dispose function has noexcept specifier
  - GitHub #105: Simplify ebo_function_holder

### Boost 1.89 Release

- Fixed bugs:
  - GitHub #92: C++26 errors: omission of ',' before varargs '...' is deprecated

### Boost 1.86 Release

- Fixed bugs:
  - GitHub #86: Invalid UTF-8 character in comment

### Boost 1.85 Release

- Fixed bugs:
  - GitHub #81: unordered_set rehash breaks insert_commit_data
  - GitHub #83: [docs] Index is missing
- Potentially breaking: Unordered containers use now by default an internal a `boost::hash`-protocol compatible internal hash functor.
  - Reasons:
    - Since Boost 1.84 Boost.ContainerHash requires C++11, breaking Boost.Intrusive C++03 users.
    - To avoid header inclusion dependency on Boost.ContainerHash, which indirectly also brings other libraries (Boost.Describe, Boost.Mp11...).
  - The new default hash function:
    - Handles scalar types directly (in case scalar types are used with `key_of_value`) with trivial hashes (similar to `boost::hash`).
    - For other types (most Boost.Intrusive users are here), uses ADL-based `hash_function` call, just like `boost::hash`.
    - If that ADL lookup fails, forward declares `boost::hash` and calls through an object of that type. If the user has included `boost/container_hash/hash.hpp` before or after including Boost.Intrusive, `boost::hash` will be properly called.
  - It's possible that some Boost.Intrusive users were using Boost.ContainerHash functions/features without including the needed `boost/container_hash/hash.hpp` header, since it was indirectly included through Boost.Intrusive. Those users will need to explicitly include `boost/container_hash/hash.hpp`to obtain Boost.ContainerHash features.
- Boost.Intrusive no longer depends on Boost.StaticCast.

### Boost 1.82 Release

- Fixed bugs:
  - GitHub #77: Suppress unused variable warnings on node_count (clang 15)

### Boost 1.81 Release

- Semi-intrusive hash containers rewritten to reduce compilation times and improve runtime performance.

### Boost 1.80 Release

- Unordered containers optimized for performance. Experimental `linear_buckets` and `fastmod_buckets` options.
- Fixed bugs:
  - GitHub #75: Bug: Rehashing an empty unordered_set with cache_begin set to true hits an assert

### Boost 1.79 Release

- The library now compiles without warnings with GCC's -Wcast-align=strict
- Fixed bugs:
  - GitHub #66: Fix declaration of node shadowing member
  - GitHub #70: list: fix remove / remove_and_dispose

### Boost 1.77 Release

- Added `noexcept` support to the library to obtain better performance and diagnostics.
- Fixed bugs:
  - GitHub #57: UB: comparing unrelated pointers
  - GitHub #59: Add noexcept support to the library
  - GitHub #60: Licensing question for math.hpp
  - GitHub #61: Fix bstree_algorithms<>::swap_nodes
  - GitHub #63: nop splice removes element

### Boost 1.76 Release

- Reduced compile-time dependencies:
  - `linear_slist_algorithms` use a simple node_ptr instead of std::pair on return.
  - `list`/`slist` use `operator <`/`operator ==` instead of `std::equal_to`/`std::less`.
- Fixed bugs:
  - GitHub #54: set.rbegin() looks like O(log(N))

### Boost 1.75 Release

- Fixed bugs:
  - GitHub #48: MSVC "assignment within conditional" warning fix
  - GitHub #49: Fix empty control statement warnings
  - GitHub #52: Invalid casting in BOOST_INTRUSIVE_BSR_INTRINSIC

### Boost 1.73 Release

- Fixed bugs:
  - GitHub #46: UB due to union based type punning

### Boost 1.71 Release

- Fixed bugs:
  - GitHub #42: Documentation does not describe treap priority_of_value changes
  - GitHub #43: Fix tests with BOOST_INTRUSIVE_VARIADIC_TEMPLATES enabled
  - GitHub #45: Disable variadic templates for MSVC-12 to avoid ICEs

### Boost 1.70 Release

- Fixed bugs:
  - GitHub Pull #33: Fix compilation in case if key is void*, again
  - GitHub Issue #34: -Wdeprecated-copy on gcc9
  - GitHub Issue #35: key_of_value on treap_set seems to be broken in 1.69
  - GitHub Issue #38: treap: Same type for priority and key comparison leads to ambiguous base class error
  - GitHub Pull #39: Fix -Wextra-semi clang warnings

### Boost 1.67 Release

- Fixed bugs:
  - GitHub Issues #29: Uninitialized variable warning pointer_plus_bits.hpp

### Boost 1.65 Release

- Fixed bugs:
  - Boost Trac #12894: Allow non std::size_t size_type
  - Boost Trac #12698: base64 iterators can't be used with iterator_advance
  - GitHub Pull #23: Conditionally replace deprecated/removed C++98 std::random_shuffle by...
  - GitHub Pull #24: Adds support for MSVC ARM64 target

### Boost 1.64 Release

- Fixed bugs:
  - Boost Trac #12745: key_nodeptr_comp broken if the key type is void*
  - Boost Trac #12761: intrusive::set::swap doesn't swap the comparison function*

### Boost 1.63 Release

- Fixed bugs:
  - Boost Trac #12556: member_value_traits.hpp has a missing #include

### Boost 1.62 Release

- Fixed bugs:
  - Boost Trac #11476: has_member_function_callable_with.hpp is massively broken with BOOST_NO_CXX11_DECLTYPE
  - Boost Trac #11994: Support intrusive container key extractors that return the key by value
  - Boost Trac #12184: clang -Wdocumentation warning
  - Boost Trac #12190: Intrusive List + Flat Map combination crashes
  - Boost Trac #12229: intrusive::unordered_set<T>::rehash() broken
  - Boost Trac #12245: bstree uses a shared static size_traits for constant_time_size<false>
  - Boost Trac #12432: Forced KeyOfValue creation when using custom compare on insert_check
- Implemented `merge` functions in ordered associative containers.
- Officially documented `root()` function for tree-based containers.

### Boost 1.61 Release

- Fixed bugs:
  - Boost Trac #11832: clang-cl + boost intrusive = miscompile
  - Boost Trac #11865: Intrusive list explicit ctor error with Clang 3.6 (C++11/14)
  - Boost Trac #11992: Add an overload of insert_check taking a key_type
  - GitHub Pull #19: ebo_functor_holder: compile fix for copy constructor

### Boost 1.60 Release

- Advanced lookup and insertions in ordered associative containers now support comparison functions that are not required to offer the same strict weak ordering as `key_compare`, the container must be partitioned in regards to the passed comparison object.
- Fixed bugs:
  - Boost Trac #11701: Regression in boost::intrusive::set::equal_range
  - Boost Trac #11765: sgtree.hpp:830: bad if test ?

### Boost 1.59 Release

- Implemented map and multimap-like interfaces.
- Refactored hashtable containers to reduce template instantiations.
- Fixed bugs:
  - Boost Trac #11222: intrusive/pointer_traits.hpp fails to compile with C++98

### Boost 1.58 Release

- Reduced compile-time dependencies, headers, and the use of Boost.Preprocessor, specially for hooks and iterators.
- Fixed bugs:
  - Boost Trac #6720: intrusive::unordered_set::clear_and_dispose does not compile on VC11 Beta when passed a stateless lambda
  - Boost Trac #10771: remove_if is broken for slist
  - Boost Trac #10853: problem with detection of const_cast_from
  - Boost Trac #10987: bug in any_xxx_node_traits, returning by reference

### Boost 1.57 Release

- Experimental version of node checkers, contributed by Matei David. Many thanks!
- Implemented N3644: Null Forward Iterators from C++14.
- Fixed bugs:
  - GitHub Pull #12: Fix MSVC14 warning C4456: declaration of 'x_parent_right' hides previous local declaration
  - Boost Trac #10520: Conversion warning in intrusive/detail/utilities.hpp
  - Boost Trac #10469: Erasing from intrusive unordered_multiset with optimize_multikey goes into an infinite loop

### Boost 1.56 Release

- Improved Doxygen generated reference and updated and fixed forward-declaration header.
- ABI breaking: Fixed ABI regression introduced in Boost 1.55 version, mainly noticeable on MSVC compilers.
- Source breaking: Removed previously deprecated `xxx_dont_splay` functions from splay containers, `splay_set_base_hook` and `splay_set_member_hook`from splay containers and `bool splay = true` extra parameter in `splaytree_algorithms` functions.
- Fixed bugs:
  - #8468: Compile error on visual studio 2010/2012 using vector with custom allocator and aligned types
  - #9332: "has_member_function_callable_with.hpp compile error on msvc-12.0".
  - #9650: "intrusive list with stateful value traits".
  - #9746: Modern Sun CC compiler detects error in intrusive library header
  - #9940: bad bug in intrusive list with safe_link (or auto_unlink) hooks
  - #9948: remove use of const_cast in intrusive containers
  - #9949: clear header node hooks upon intrusive container destruction
  - #9961: tests for hooks not derived frorm generic_hook
- Optimized tree rebalancing code to avoid redundant assignments.
- Added 64 bit prime values for `suggested_upper_bucket_count`/`suggested_lower_bucket_count` in 64 bit platforms.
- Deleted workarounds for old SUN_CC compilers, those are now unsupported as modern SunPro compilers are standard-corforming enough.

### Boost 1.55 Release

- Source breaking: Deprecated `xxx_dont_splay` functions from splay containers. Deprecated `splay_set_base_hook` and `splay_set_member_hook`from splay containers, use `bs_set_base_hook` or `bs_set_member_hook` instead. Both will be removed in Boost 1.56.
- ABI breaking: Hash containers' end iterator was implemented pointing to one-past the end of the bucket array (see #8698) causing severe bugs when values to be inserted where allocated next to the bucket array. End iterator implementation was changed to point to the beginning of the bucket array.
- Big refactoring in order to reduce template and debug symbol bloat. Test object files have been slashed to half in MSVC compilers in Debug mode. Toolchains without Identical COMDAT Folding (ICF) should notice size improvements.
- Implemented SCARY iterators.

### Boost 1.54 Release

- Added `BOOST_NO_EXCEPTIONS` support (bug #7849).

### Boost 1.53 Release

- Fixed bugs #7174, #7529, #7815.
- Fixed GCC -Wshadow warnings.
- Added missing `explicit` keyword in several intrusive container constructors.
- Replaced deprecated BOOST_NO_XXXX with newer BOOST_NO_CXX11_XXX macros.
- Small documentation fixes.

### Boost 1.51 Release

- Fixed bugs #6841, #6907, #6922, #7033,
- Added `bounded_range` function to trees.

### Boost 1.49 Release

- Fixed bugs #6347, #6223, #6153.

### Boost 1.48 Release

- Fixed bugs #4797, #5165, #5183, #5191.

### Boost 1.46 Release

- Fixed bug #4980,

### Boost 1.45 Release

- Added `function_hook` option.
- Fixed bugs #2611, #3288, #3304, #3489, #3668, #3688, #3698, #3706, #3721. #3729, #3746, #3781, #3840, #3849, #3339, #3419, #3431, #4021.

### Boost 1.40 Release

- Code cleanup in bstree_algorithms.hpp and avl_tree_algorithms.hpp
- Fixed bug #3164.

### Boost 1.39 Release

- Optimized `list::merge` and `slist::merge`
- `list::sort` and `slist::sort` are now stable.
- Fixed bugs #2689, #2755, #2786, #2807, #2810, #2862.

### Boost 1.38 Release

- New treap-based containers: treap, treap_set, treap_multiset.
- Corrected compilation bug for Windows-based 64 bit compilers.
- Corrected exception-safety bugs in container constructors.
- Updated documentation to show rvalue-references functions instead of emulation functions.

### Boost 1.37 Release

- Intrusive now takes advantage of compilers with variadic templates.
- `clone_from` functions now copy predicates and hash functions of associative containers.
- Added incremental hashing to unordered containers via `incremental<>` option.
- Update some function parameters from `iterator` to `const_iterator` in containers to keep up with the draft of the next standard.
- Added an option to specify include files for intrusive configurable assertion macros.

### Boost 1.36 Release

- Added `linear<>` and `cache_last<>` options to singly linked lists.
- Added `optimize_multikey<>` option to unordered container hooks.
- Optimized unordered containers when `store_hash` option is used in the hook.
- Implementation changed to be exception agnostic so that it can be used in environments without exceptions.
- Added `container_from_iterator` function to tree-based containers.