Почему std::bind и boost::bind не могут использоваться как взаимозаменяемые в этом учебнике по Boost.Asio

Я пробовал различные руководства в документации Boost.Asio и пытался заменить компоненты boost на компоненты C++11. Однако у меня возникла ошибка при использовании std::bind в Timer.5 - Синхронизация обработчиков в многопоточных программах. Вот предложенный код:

#include 
#include 
#include 
#include 
#include 

class printer { /* Not relevent here */ };

int main()
{
  boost::asio::io_service io;
  printer p(io);
  boost::thread t(boost::bind(&boost::asio::io_service::run, &io));
  io.run();
  t.join();

  return 0;
}

Я попытался заменить boost::thread на std::thread и boost::bind на std::bind. Вот мой код:

#include 
#include 
#include 
#include 
#include 

class printer { /* Not relevent here */ };

int main() {
    boost::asio::io_service io;
    printer p(io);
    std::thread t(std::bind(&boost::asio::io_service::run, &io));
    io.run();
    t.join();
}

При компиляции в GCC 4.7 я получил вот такую ошибку времени компиляции:

g++ -std=c++0x main.cpp -lboost_system -lboost_date_time -lpthread
main.cpp: In function ‘int main()’:
main.cpp:52:60: erreur: no matching function for call to ‘bind(, boost::asio::io_service*)’
main.cpp:52:60: note: candidates are:
/usr/include/c++/4.6/functional:1444:5: note: template typename std::_Bind_helper::type std::bind(_Functor&&, _ArgTypes&& ...)
/usr/include/c++/4.6/functional:1471:5: note: template typename std::_Bindres_helper::type std::bind(_Functor&&, _ArgTypes&& ...)

Откуда взялась эта ошибка, учитывая, что я не использовал никаких boost::asio::placeholders (как объясняется в этом вопросе stackoverflow Should std::bind be compatible with boost::asio? )?

18
задан Community 23 May 2017 в 12:00
поделиться