以下代码可以轻松修复,但很烦人。
#include <functional>
#include <boost/bind.hpp>
void foo() {
using namespace std::placeholders;
std::bind(_1, _2, _3); // ambiguous
}
Run Code Online (Sandbox Code Playgroud)
有一个宏BOOST_BIND_NO_PLACEHOLDERS,但是使用这个宏也会带来一些缺点,比如导致boost::placeholders从包含<boost/bind.hpp>但不包含的编译单元中消失<boost/bind/placeholders.hpp>。
该名称冲突还带有其他库一样boost::mpl,我不认为维护者不知道这个问题,但我想知道他们为什么坚持不贬低和删除using namespace boost::placeholders在<boost/bind.hpp>。