
Hi Peter,
Fernando Cacciola wrote:
template<class Functors, int N> struct get_bind_expr_type { typedef typename ::boost::tuples::element<N,Functors>::type Functor ;
typedef typename Functor::result_type functor_result_type ;
// This should be the result type of the previous functor in real code typedef typename Functor::result_type functor_argument_type ;
// NOTE: the recursion is inside this metafucntion typedef typename get_bind_argument_type<Functors,N>::type bind_argument_type ;
typedef _bi::bind_t<functor_result_type ,functor_result_type (*) ( functor_argument_type )
You probably need Functor here, not some pointer to function.
Oops, of course. But even fixing that I still get the same error: Error 1 error C2664: 'boost::_bi::bind_t<R,F,L>::bind_t(const boost::_bi::bind_t<R,F,L> &)' : cannot convert parameter 1 from 'boost::_bi::bind_t<R,F,L>' to 'const boost::_bi::bind_t<R,F,L> &' d:\programacion\projects\policypipe\policypipe\policypipe.cpp 120 Here: static result_type apply( Functors const& functors ) { ========> return bind(functors.get<N>(), functor_pipe_impl<Functors,N-1>::apply(functors) ); } The compiler, VC8.0, is refusing to copy construct the bind_t object. Any idea why? FWIW I tried the same with LL::bind and I get the same kind of error (can't copy construct functor_base<...>) TIA Fernando Cacciola