Unfortunately I cannot grok boost::bind error, but this code seems really simple. If I change the code so that an int is passed to async_discovery, the program compiles. The problem seems to be centered around passing a boost::bind as a template argument. Any help would be appreciated.
Here is the code...
#include <boost/bind.hpp>
class antix_discovery_service {
public:
template <typename Handler>
void start_async_discovery(Handler handler)
{
}
/// Asynchronously resolve a query to a list of entries.
template <typename Handler>
void async_discovery(Handler handler)
{
boost::bind(&antix_discovery_service::template start_async_discovery<Handler>,
this, handler)();
}
private:
int ttt;
};
class test
{
public:
void do_it()
{
}
};
int main()
{
antix_discovery_service ads;
test t;
ads.async_discovery(boost::bind<void>(&test::do_it, t));
return 0;
}
and here is the error...
main.cpp: In function 'int main()':
main.cpp:33: warning: unused variable 'jjj'
../vendor/boost/boost/bind/bind.hpp: In member function 'void boost::_bi::list2<A1, A2>::operator()(boost::_bi::type<void>, F&, A&, int) [with F = boost::_mfi::mf1<void, antix_discovery_service, boost::_bi::bind_t<void, boost::_mfi::mf0<void, test>, boost::_bi::list1<boost::_bi::value<test> > > >, A = boost::_bi::list0, A1 = boost::_bi::value<antix_discovery_service*>, A2 = boost::_bi::bind_t<void, boost::_mfi::mf0<void, test>, boost::_bi::list1<boost::_bi::value<test> > >]':
../vendor/boost/boost/bind/bind_template.hpp:20: instantiated from 'typename boost::_bi::result_traits<R, F>::type boost::_bi::bind_t<R, F, L>::operator()() [with R = void, F = boost::_mfi::mf1<void, antix_discovery_service, boost::_bi::bind_t<void, boost::_mfi::mf0<void, test>, boost::_bi::list1<boost::_bi::value<test> > > >, L = boost::_bi::list2<boost::_bi::value<antix_discovery_service*>, boost::_bi::bind_t<void, boost::_mfi::mf0<void, test>, boost::_bi::list1<boost::_bi::value<test> > > >]'
main.cpp:14: instantiated from 'void antix_discovery_service::async_discovery(Handler) [with Handler = boost::_bi::bind_t<void, boost::_mfi::mf0<void, test>, boost::_bi::list1<boost::_bi::value<test> > >]'
main.cpp:35: instantiated from here
../vendor/boost/boost/bind/bind.hpp:306: error: invalid use of void expression
...failed gcc.compile.c++ ..\.bin\test_bind\gcc-4.0\debug\main.o...
...skipped <p..\.bin\test_bind\gcc-4.0\debug>test_bind.avc for lack of <p..\.bin\test_bind\gcc-4.0\debug>main.o...
...skipped <p..\.bin\test_bind\gcc-4.0\debug>test_bind.ix86-win32.elf for lack of <p..\.bin\test_bind\gcc-4.0\debug>test_bind.avc...
...skipped <pinstall>test_bind.ix86-win32.elf for lack of <p..\.bin\test_bind\gcc-4.0\debug>test_bind.ix86-win32.elf...
...failed updating 1 target...
...skipped 3 targets...
Compilation exited abnormally with code 1 at Tue Jul 14 14:27:58
-Jimmy.