Deque rewrite, segtor, segmented algorithms and a hub review ahead

Portrait of Ion Gaztañaga Ion Gaztañaga · Apr 20, 2026

During Q1 2026, I’ve been working in the following areas:

Boost.Container

The rewritten boost::container::deque shipped in 1.90. Leaner container and iterators. Details and benchmarks against libstdc++, libc++ and MSVC STL on my blog: Inside Boost.Container: comparing different deque implementations.

The deque implementation was refactored into a reusable deque_impl so it could back a new segtor container: a single-ended counterpart to deque (same segmented storage, push_back/pop_back only) for the common case of stable references plus append-only growth. Ships in 1.91.

For the upcoming hub review I also added an experimental nest container as a neutral reference point for benchmarking against Joaquín’s hub and Matthew Bentley’s plf::hive.

The largest piece of work was a family of experimental segmented algorithms (segmented_find_if, segmented_mismatch, segmented_copy, segmented_partition, segmented_set_union, … around 30 in total) that understand the block layout of deque / segtor / nest and recurse into segments instead of walking iterators one element at a time. Experimented also with loop unrolling in STL-like algorithms.

Other additions: C++20 starts_with / ends_with and C++23 contains on basic_string; new inline_chars, stored_size and growth_factor options for basic_string; overalignment support across the pool allocator family (adaptive_pool, private_node_pool, shared_node_pool and friends); unchecked_push_back / unchecked_emplace_back on vector / small_vector / static_vector; a prefetch option.

Fixes: #328 (redundant allocator copy in deque, resolved by the rewrite), #330 (detail/pair.hpp partial specializations for std::pair), #332 (aligned_alloc on XCode 12), #334 (overload resolution in the P2363R5 implementation).

Boost.Intrusive

Changed the return type of list / slist remove, remove_if and unique from void to size_type following C++20 (LWG 2959 / P0646). Merged PR#104 and PR#105, both from @nkolotov — the first fixes a noexcept-specifier bug that broke ebo_function_holder_traits under C++17, the second simplifies ebo_functor_holder by removing custom type-traits machinery. Many thanks. Also removed MSVC C4180 and switched several constant-condition branches to BOOST_IF_CONSTEXPR.

Boost.Move

Merged PR#63 by @Lastique removing Boost.StaticAssert dependencies, addressed #64 (std::pair specializations for the trivial type traits), and marked the conversion-aware helpers forceinline.

Boost.Interprocess

Added OS-native systemwide thread IDs with backends for Linux, FreeBSD, macOS, Cygwin (via WinAPI) and Windows. This unblocks process-shared mutex ownership tracking on systems where _POSIX_THREAD_PROCESS_SHARED is buggy (notably FreeBSD).

Reworked the allocator stack for overaligned types end-to-end: segment_manager, allocator, node_allocator, private_node_allocator, cached_node_allocator, adaptive_pool and friends now carry explicit alignment and use allocate_aligned internally.

Fixes: #252 (offset_ptr construction regression with clang since 1.87.0), #276 and #277 (-Wundef warnings). Windows MSVC 14.5, Windows-ARM64 and Linux-ARM64 were added to the CI matrix across all four libraries.

Review manager for boost::container::hub

I’ll be serving as review manager for Joaquín’s boost::container::hub, a drop-in replacement for C++26 std::hive, formally reviewed April 16-26. Late Q1 went into reading the proposal, running the benchmarks and putting the reviewer materials together.

Support to the community

Ongoing maintenance and review of community contributions across Move, Container, Intrusive and Interprocess.

All Posts by This Author