The survey of the state of the art is missing boost.interprocess, which provides shared memory allocators plus drop-in replacements for c++ standard library containers that can handle these allocators [1].
The biggest problem with interprocess is that out of the box it is not capable of handling application failures gracefully and transparently.
[1] Basically the container must not assume that the allocator::pointer type is an actual raw pointer as interprocess uses a custom offest pointer.