
AMDG Dmitry V. Krivenok wrote:
bll::bind(boost::make_tuple<int*, bool>, &bll::_1, true)); ////////////////////////////////////////////////////////////////
It doesn't compile:
$ g++-4.3.2 -I /usr/local/dev/boost-1.38.0/include/ main2.cpp main2.cpp: In function 'int main()': main2.cpp:22: error: no matching function for call to 'bind(<unresolved overloaded function type>, const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::other_action<boost::lambda::addressof_action>, boost::tuples::tuple<boost::lambda::lambda_functor<boost::lambda::placeholder<1>
, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type> > >, bool)' $
What's wrong in the second program?
* make_tuple is overloaded for more than 2 arguments. * When taking the address of a function template, the compiler can try to deduce template parameters based on the required signature. for example, static_cast<boost::tuple<int*, bool, char> >(*)(const int*&, const bool&, const char&)>(&boost::make_tuple<int*, bool>) is legal and will yield a different overload of make_tuple than the one that you intend. * bind is a function template so it doesn't provide enough information to resolve the ambiguity. In Christ, Steven Watanabe