Is there any difference between the two? Or am I safe to replace every occurrence of boost::bind by std::bind in my code and thereby remove the dep
Besides the several differences cited on the other answers, here are two other differences:
boost::bind seems to deal with overloaded function names in some situations, whereas std::bind does not deal with them in 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()
auto badstd2 = std::bind(foo, 1);
//compile error: no matching function for call to bind()
auto std1 = std::bind(static_cast(foo)); //compiles ok
auto std2 = std::bind(static_cast(foo), 1); //compiles ok
auto boost1 = boost::bind(foo, 1); //compiles ok
auto boost2 = boost::bind(foo); //compiles ok
So if you simply replaced all boost::bind with std::bind, your build could break.
std::bind can seamlessly bind to c++11 lambda types, whereas boost::bind as of boost 1.54 seems to require input from the user (unless return_type is defined). See boost doc(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(fun, _1); //ok
boostbound1(1);
auto boostbound2 = boost::bind(boost::type(), fun, _1); //ok
boostbound2(1);
So, if you simply replaced all std::bind with boost::bind, your build could also break.