
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