[interprocess] set doesn't work when key_type is pointer.
Hello all, It seems that boost::interprocess::set won't compile if the key_type is pointer. However, bip::vector or std::set works fine. I'm using g++ 4.5.2 and boost 1.46.0 with linux 2.6.37. Here is my code: // compile command: g++ a.cpp -lboost_thread namespace bip = boost::interprocess; struct comp { template<class Pointer> bool operator()(Pointer a, Pointer b) const { return *a < *b; } bool operator()(int a, int b) const { return a < b; } }; typedef bip::managed_mapped_file::segment_manager segment_manager_t; #define fset(value_t) \ bip::set<value_t, comp, bip::allocator<value_t, segment_manager_t> > bip::managed_mapped_file managed_shm(bip::open_or_create, "/tmp/bip_test", 1024); void bip_example() { fset(int*) s(comp(), managed_shm.get_segment_manager()); s.insert(new int (7)); ///< error: key_type can't be pointer in bip. fset(int) s2(comp(), managed_shm.get_segment_manager()); s2.insert(int (7)); ///< ok: non-pointer is accepted. std::set<int*, comp> s3; s3.insert(new int (7)); ///< ok: int* works with STL, as well as shared_ptr, offset_ptr. } void more_example() { typedef bip::offset_ptr<int> optr; fset(optr) s3(comp(), managed_shm.get_segment_manager()); bip::allocator<int, segment_manager_t> alloc_int = managed_shm.get_segment_manager(); optr p = alloc_int.allocate(1); alloc_int.construct(p, 7); s3.insert(p); ///< error: bip doesn't work with offset_ptr too. typedef boost::shared_ptr<int> sptr; fset(sptr) s4(comp(), managed_shm.get_segment_manager()); s4.insert(sptr(new int(7))); ///< ok: shared_ptr works fine. } Won't that fail to compile, or am I missing something? Regards, Tianjiao
El 26/03/2011 15:13, skywalker escribió:
Hello all,
It seems that boost::interprocess::set won't compile if the key_type is pointer. However, bip::vector or std::set works fine. I'm using g++ 4.5.2 and boost 1.46.0 with linux 2.6.37. Here is my code: // compile command: g++ a.cpp -lboost_thread
It seems this is an error in Boost.Intrusive, that creates ambiguous comparison functors, when pointer type is implicitly convertible from raw pointers. I'll try to fix it ASAP.
participants (2)
-
Ion Gaztañaga
-
skywalker