С Boost я могу создать необязательный на месте с помощью:
boost::optional<boost::asio::io_service::work> work = boost::in_place(boost::ref(io_service));
И отключите его с помощью:
work = boost::none;
Благодаря экспериментальной поддержке C ++ 14 я могу вместо этого создать необязательный компонент на месте с помощью:
std::experimental::optional<boost::asio::io_service::work> work;
work.emplace(boost::asio::io_service::work(io_service));
Но я не знаю, как его отключить ...