Question: The following code can be fixed easily, but quite annoying.

```cpp
#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>`.

Answer: 
You can use 

```
#define BOOST_BIND_NO_PLACEHOLDERS

```

before including other Boost headers.

I don't know when this was introduced, only that it works in 1.67. Feel free to edit with more accurate information.
Either add:

```
#define BOOST_BIND_GLOBAL_PLACEHOLDERS

```

before you import boost headers.

Or just add to your CMakeLists:

```
add_definitions(-DBOOST_BIND_GLOBAL_PLACEHOLDERS)

```

when you configure Boost.