Kirit Sælensminde wrote:
That makes perfect sense, unfortunately it doesn't help.
From the worker thread example I've removed the specialisation for R(**)(void) - I can't work out why there is a double indirection there, but it might well be contributing to the problem.
I've also changed the functor that does the type handling to this:
template< typename F > boost::shared_ptr< Future< typename boost::function_traits< F
::result_type > > operator()( F f ) { return run< typename boost::function_traits< typename boost::remove_pointer< F >::type >::result_type >( f ); }
The return type should probably be:
boost::shared_ptr< Future< typename boost::function_traits< typename
boost::remove_pointer<F>::type>::result_type > >
But you may want to wrap that up in a small traits class to avoid repeated
typing :-)
HTH John.
PS My simple test case is this:
#include