Boost logo

Boost Users :

Subject: [Boost-users] [interprocess] set doesn't work when key_type is pointer.
From: skywalker (ytj000_at_[hidden])
Date: 2011-03-26 10:13:14


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


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net