Boost logo

Boost Users :

Subject: Re: [Boost-users] [Container] ptr_set with user define compare function
From: Steven Watanabe (watanabesj_at_[hidden])
Date: 2009-05-22 13:27:02


AMDG

梁绍池 wrote:
> I've defined a function object as below:
>
> struct BaseAddrLess : public std::binary_function<Base, Base, bool> {
> result_type operator() (const first_argument_type& lhs, const
> second_argument_type& rhs) const {
> return &lhs < &rhs;
> }
> };
>
> and use as a compare function in ptr_set like this:
> ptr_set<Base, BaseAddrLess> bset;
>
> when the class Base is a abstract class the vc9 compiler will complain
> use of undefined type 'boost::result_of<F>'
>
> What causes this problem? How to solve it?
>

Works for me.
Do you have a minimal test case that fails?
What version of Boost are you using?

#include <functional>
#include <boost/ptr_container/ptr_set.hpp>

struct Base {
virtual ~Base() = 0;
};

Base::~Base() {}

struct Derived : Base {};

struct BaseAddrLess : public std::binary_function<Base, Base, bool> {
result_type operator() (
const first_argument_type& lhs,
const second_argument_type& rhs) const {
return &lhs < &rhs;
}
};

int main() {
boost::ptr_set<Base, BaseAddrLess> bset;
bset.insert(new Derived());
}

In Christ,
Steven Watanabe


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