The following code can be fixed easily, but quite annoying.
#include <functional>
#include <boost/bind.hpp>
void foo() {
using namespace std::placeholders;
std::bind(_1, _2, _3); // ambiguous
}
There's a macro BOOST_BIND_NO_PLACEHOLDERS
, but using this macro will also bring some drawbacks like causing boost::placeholders
disappear from the compile unit included <boost/bind.hpp>
but not included <boost/bind/placeholders.hpp>
.
The name conflicts also comes with other libs like boost::mpl
, I don't think the maintainers don't know the problem, but I want to know why they insist on not deprecating and deleting using namespace boost::placeholders
in <boost/bind.hpp>
.
using namespace boost::placeholders;
. – Barracoon