For those who are following the development of this lib, I'd like to announce that the
release version of Boost.PolyCollection for Boost 1.65 is already committed to the master
branch of Boost.

Much of the to-do list prepared by Ion at the end of the review has been implemented. The
main features left as roadmap are listed at:


As for the improvements already included, let me comment on what I feel are the most

* The implementation has been refactored to avoid internal virtual calls at places where
the type of the segment involved is known at compile time. Also, segment lookup (the
process to get to the segment for U from typeid(U)) has been greatly sped up by means
of a std::type_info* cache. These two improvements result in a combined reduction of
around 25-30% in insertion times. There's an API breaking change though: no longer
is std::type_index used and const std::type_info &'s have to be directly provided
instead --this is likely to go unnoticed by those of you already using the lib.
* Polymorphic collections now satisfy standard requirements on allocator use as stated
in [container.requirements.general]/3 (or, more precisely, the natural interpretation for
polymorhpic containers of this clause). This is explicitly described in the reference. As a
result, polymorphic collections can now use std::scoped_allocator_adaptor without any
* Added segment(typeid(U))/segment<U>() convenience funtions returning a range
object over the selected segment. This allows us to write:

  for(const auto& x:c.segment(typeid(warrior))){

* Collection-level max_size() and capacity() have been removed as I didn't seem to find
sensible semantics for them. Segment-level max_size() and capacity() are kept, of course.
* Hopefully the tutorial section on boost::function_collection is a bit clearer now.

The library works OK for MSVC>=14.0,GCC>=5.0,Clang>=3.7. Unfortunately, Intel fails
for test_algorithm:


If someone's interested in helping fix that, please step up.

Thank you,

Joaquín M López Muñoz