Почему boost :: bind настаивает на том, чтобы `boost :: placeholder` включался в глобальное пространство имен? - PullRequest
0 голосов
/ 08 ноября 2018

Следующий код может быть легко исправлен, но довольно раздражает.

#include <functional>
#include <boost/bind.hpp>
void foo() {
  using namespace std::placeholders;
  std::bind(_1, _2, _3); // ambiguous
}

Есть макрос BOOST_BIND_NO_PLACEHOLDERS, но использование этого макроса также принесет некоторые недостатки, такие как boost::placeholders исчезновение из модуля компиляции, включенного <boost/bind.hpp>, но не включенного <boost/bind/placeholders.hpp>.

Конфликты имен происходят и с другими библиотеками, такими как boost::mpl, я не думаю, что сопровождающие не знают о проблеме, но я хочу знать, почему они настаивают на том, чтобы не унижать и не удалять using namespace boost::placeholders в <boost/bind.hpp> .

1 Ответ

0 голосов
/ 29 июля 2019

Вы можете использовать

#define BOOST_BIND_NO_PLACEHOLDERS

перед включением других заголовков Boost.

Я не знаю, когда это было введено, только то, что оно работает в 1.67. Не стесняйтесь редактировать с более точной информацией.

...