std :: unordered_map con boost :: asignador entre procesos en memoria compartida - ¿inconvenientes?

Ahora mismo estoy entrando en la memoria compartida usandoboost::interprocess.

He definido algunosstd::unordered_map ystd::unordered_set tipos como de la siguiente manera:

#include <boost/interprocess/allocators/allocator.hpp>

#include <unordered_map> // NOT the boost implementation ...

...

namespace ipc = boost::interprocess;

 /**
 * allocator type needed to construct maps in shared memory
 */
typedef ipc::allocator<std::pair<const size_t, std::string>,
           ipc::managed_shared_memory::segment_manager> OBJ_MAP_ALLOCATOR;

/**
 * map type to construct maps in shared memory
 */
typedef std::unordered_map<size_t,
               std::string,
               std::hash<size_t>,
               std::equal_to<size_t>,
               OBJ_MAP_ALLOCATOR> OBJ_MAP_TYPE;

Los inicialicé así:

ipc::managed_shared_memory segment;

// allocate segment etc ... 

OBJ_MAP_ALLOCATOR alloc_inst(segment.get_segment_manager());
objMap = segment.find_or_construct<OBJ_MAP_TYPE> (ipc::unique_instance)(alloc_inst);

Esto parece funcionar bien, no he encontrado ningún problema durante la compilación o el tiempo de ejecución (trabajando en macOS,Apple LLVM version 9.1.0 (clang-902.0.39.1), con C ++ 14 estándar).

En la documentación de Boost, solo se mencionan los contenedores de Boost o las implementaciones específicas entre procesos. Desafortunadamente, no parecen contener las versiones desordenadas.

Entonces, me pregunto si hay algo problemático en usar los contenedores STL predeterminados con los asignadores Boost. ¿Quizás en una plataforma diferente?

Cualquier pista apreciada!

Actualizar:

Me preguntaba si estaba funcionando en un entorno diferente, así que escribí un ejemplo mínimo en Coliru (que sorprendentemente funciona constd::string):

http://coliru.stacked-crooked.com/a/91d1a143778cf3e9

Respuestas a la pregunta(1)

Su respuesta a la pregunta