Hi,
I was trying to use boost function/bind to bind the first argument of a member function that takes two arguments, when I got into a compilation error that I can't quite decipher or understand, below is a sample representation of the problem, and then there's the compilation error, am I doing something incorrectly here?
I have tried removing the boost::mem_fn instantiation with no difference.
#include
#include
#include
#include <iostream>
using namespace std;
using namespace boost;
class my_class
{
public:
void test(bool b)
{
cout << "got " << b << endl;
}
private:
};
int main()
{
my_class c;
boost::function1 test_fn;
boost::bind(&my_class::test, &c, _2);
/* causes a compilation error */
test_fn = boost::bind<void>(boost::mem_fn(&my_class::test), &c, _2);
/* works fine */
test_fn = bind1st(mem_fun(&my_class::test), &c);
test_fn(true);
test_fn(false);
return 0;
}
/usr/boost/include/boost/bind/arg.hpp: In constructor 'boost::arg<I>::arg(const T&) [with T = boost::arg<2> ()(), int I = 1]':
/usr/boost/include/boost/bind.hpp:292: instantiated from 'void boost::_bi::list2::operator()(boost::_bi::type<void>, F&, A&, int) [with F = boost::_mfi::mf1, A = boost::_bi::list1, A1 = boost::_bi::value, A2 = boost::arg<2>]'
/usr/boost/include/boost/bind/bind_template.hpp:32: instantiated from 'typename boost::_bi::result_traits::type boost::_bi::bind_t::operator()(A1&) [with A1 = bool, R = void, F = boost::_mfi::mf1, L = boost::_bi::list2, boost::arg<2> >]'
/usr/boost/include/boost/function/function_template.hpp:152: instantiated from 'static void boost::detail::function::void_function_obj_invoker1::invoke(boost::detail::function::function_buffer&, T0) [with FunctionObj = boost::_bi::bind_t, boost::_bi::list2, boost::arg<2> > >, R = void, T0 = bool]'
/usr/boost/include/boost/function/function_template.hpp:904: instantiated from 'void boost::function1::assign_to(Functor) [with Functor = boost::_bi::bind_t, boost::_bi::list2, boost::arg<2> > >, R = void, T0 = bool]'
/usr/boost/include/boost/function/function_template.hpp:785: instantiated from 'typename boost::enable_if_c::value, boost::function1&>::type boost::function1::operator=(Functor) [with Functor = boost::_bi::bind_t, boost::_bi::list2, boost::arg<2> > >, R = void, T0 = bool]'
test.cpp:28: instantiated from here
/usr/boost/include/boost/bind/arg.hpp:37: error: creating array with negative size ('-0x00000000000000001')
Regards,
Ahmed