Проблема с кодом при использовании boost :: interprocess в VS 2010

Я пытаюсь создать фрагмент кода в VS 2010, который обычно можно найти в Интернете в качестве примера наличия карты в общей памяти.

#include <boost\interprocess\managed_shared_memory.hpp>
#include <boost\interprocess\containers\map.hpp>

typedef boost::interprocess::map<long,long,
std::less<long>,
boost::interprocess::allocator<std::pair<long,long>,
boost::interprocess::managed_shared_memory::segment_manager> >
shmap;

boost::interprocess::managed_shared_memory segment1(
boost::interprocess::create_only,
"MySharedMemory", 655360); //segment name and size in bytes

shmap *rp = segment1.construct<shmap>("SharedMap")(
std::less<long>(), segment1.get_segment_manager());

Я получаю эту ошибку, которая поражает мой разум. Есть идеи?

error C2338: (container_detail::is_same<std::pair<const Key, T>, typename A::value_type>::value)

0

Решение

Должно быть

typedef boost::interprocess::map
<long,long,std::less<long>,
boost::interprocess::allocator<std::pair<const long,long>,
boost::interprocess::managed_shared_memory::segment_manager> > shmap;

Поскольку внутренняя проверка is_same<std::pair<const Key, T>, Allocator::value_type>

2

Другие решения

Других решений пока нет …