
I am a new user and try to write some codes with shared memory using boost.interprocess. Basically, I followed the examples and the allocation seems fine. But the use of shared-memory container gave me a bunch of error messages related to "instantiated from here." during compile. The error seems related to the template. But I have no idea how to fix it yet. Any suggestion would be helpful. Thanks. Po-Chun My code: struct LongIntLess { bool operator()(const uint64_t a, const uint64_t b) { return a < b; } }; main () { using namespace boost::interprocess; try{ shared_memory_object::remove("SharedMemory"); managed_shared_memory segment (create_only, "SharedMemory", sizeof (uint64_t)*200); typedef allocator< uint64_t, managed_shared_memory::segment_manager> shmAllocator_t; typedef set<uint64_t, shmAllocator_t> shrSet_t; const shmAllocator_t alloc_inst (segment.get_segment_manager()); shrSet_t *WrSet_1; WrSet_1 = segment.construct<shrSet_t> ("shrSet_t") ("LongIntLess", alloc_inst); // <= not sure about this // Is it right way to construct a set ? WrSet_1->insert(2); // <====== This line causes the error } catch (...){ shared_memory_object::remove("SharedMemory"); throw(); } shared_memory_object::remove("SharedMemory"); } The error messages are from these files: boost/interprocess/containers/ detail/tree.hpp: boost/intrusive/detail/tree_algorithms.hpp boost/intrusive/rbtree.hpp boost/interprocess/containers/detail/tree.hpp boost/interprocess/containers/set.hpp One of the error messges is like: tree.hpp:331: instantiated from 'bool boost::interprocess::detail::rbtree<Key, Value, KeyOfValue, KeyCompare, A>::key_node_compare<KeyValueCompare>::operator()(const KeyType&, const typename boost::interprocess::detail::node_alloc_holder<A, typename boost::interprocess::detail::intrusive_rbtree_type<A, boost::interprocess::detail::value_compare_impl<Key, Value, KeyCompare, KeyOfValue> >::type>::Node&) const [with KeyType = long unsigned int, KeyValueCompare = boost::interprocess::detail::value_compare_impl<long unsigned int, long unsigned int, boost::interprocess::allocator<long unsigned int, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index> >, boost::interprocess::detail::identity<long unsigned int> >, Key = long unsigned int, Value = long unsigned int, KeyOfValue = boost::interprocess::detail::identity<long unsigned int>, KeyCompare = boost::interprocess::allocator<long unsigned int, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index> >, A = std::allocator<long unsigned int>]'