Besides the few differences mentioned in the other answers, there are two other differences:
boost::bind seems to deal with overloaded function names in some situations, while std::bind does not work with them the same way. See C ++ 11 faq
(using gcc 4.7.2, boost lib version 1_54)
void foo(){} void foo(int i){} auto badstd1 = std::bind(foo); //compile error: no matching function for call to bind(<unresolved overloaded function type>) auto badstd2 = std::bind(foo, 1); //compile error: no matching function for call to bind(<unresolved overloaded function type>) auto std1 = std::bind(static_cast<void(*)()>(foo)); //compiles ok auto std2 = std::bind(static_cast<void(*)(int)>(foo), 1); //compiles ok auto boost1 = boost::bind(foo, 1); //compiles ok auto boost2 = boost::bind(foo); //compiles ok
So, if you just replaced all boost::bind with std::bind , your assembly might break.
std::bind can easily bind to C ++ 11 lambda types, while boost::bind with a boost of 1.54 seems to require user input (unless return_type is specified). See more details.
(using gcc 4.7.2, boost lib version 1_54)
auto fun = [](int i) { return i;}; auto stdbound = std::bind(fun, std::placeholders::_1); stdbound(1); auto boostboundNaive = boost::bind(fun, _1); //compile error. // error: no type named 'result_type' ... auto boostbound1 = boost::bind<int>(fun, _1); //ok boostbound1(1); auto boostbound2 = boost::bind(boost::type<int>(), fun, _1); //ok boostbound2(1);
So, if you just replaced all std::bind with boost::bind , your assembly may also break.
orm Aug 07 '13 at 0:36 2013-08-07 00:36
source share