Boost logo

Boost :

From: jkharris01 (john.harris_at_[hidden])
Date: 2002-01-16 10:39:41

This code doesn't compile with MSVC6 and boost 1.26.0 unless I change
the member function return type to something other than void. The
RHS is fine, but trying to save it off in a boost::function<...> is
not. What's up?

struct X
        virtual void foo(int) {}

int main(int argc, char* argv[])
   boost::function<void,int> f = boost::bind(&X::foo, &the_x, _1);

======= error message

d:\work\misc\boost\1_26_0\dev\boost/bind/mem_fn_template.hpp(100) :
error C2562: '()' : 'void' function returning a value
(98) : see declaration of '()'
(99) : while compiling class-template member function 'void
__thiscall boost::_mfi::mf1<void,struct X,int>::operator ()(struct X
*,int) const'

========== code referenced by error message:
// mf1

template<class R, class T, class A1> class BOOST_MEM_FN_NAME(mf1)

    typedef R result_type;
    typedef T * first_argument_type;
    typedef A1 second_argument_type;

    typedef R (BOOST_MEM_FN_CC T::*F) (A1);
    F f_;

    explicit BOOST_MEM_FN_NAME(mf1)(F f): f_(f) {}

    R operator()(T * p, A1 a1) const
===>error line!!! BOOST_MEM_FN_RETURN (p->*f_)(a1);

Boost list run by bdawes at, gregod at, cpdaniel at, john at