
[snip]
Christian> This invalidates the use of stateful allocators, because it is
making multiple temporary lists that do not use the allocator that the parent container was supplied with.
Steven> No it doesn't. Boost.Intrusive doesn't allocate anything. All that sort does is to rearrange existing nodes, so the allocator is not needed. Boost.Intrusive doesn't even know that an allocator exists.
I stand corrected - I just saw that interprocess::list<> used the same algorithm as MSVC, including the temporary default-constructed lists (without passing the allocator). I did not follow it through to realise that unlike the MSVC implementation, Boost.Intrusive does not do any allocation. The following works on MSVC and GCC: monotonic::storage<> storage; { interprocess::list<int, monotonic::allocator<int> > list(storage); generate_n(back_inserter(list), 10, rand); list.sort(); } I'll happily base my containers on interprocess::containers rather than std::containers. What do people think of moving boost::interprocess::containers to boost::containers? These containers are not really specific to interprocess? Thanks, Christian.