|
Boost : |
From: Thomas Goirand (zigo_at_[hidden])
Date: 2021-01-07 23:49:21
On 1/7/21 9:22 PM, Andrey Semashev via Boost wrote:
> On 1/7/21 4:51 PM, Thomas Goirand via Boost wrote:
>> Hi,
>>
>> I'm the Debian package maintainer for Ceph. Ceph currently fails to
>> build with latest libbost. Here's the build log:
>>
>> /root/ceph/src/common/async/completion.h:194:29: error:
>> 'boost::asio::executor_work_guard<boost::asio::execution::any_executor<
>>>> '} has no member named 'defer'; did you mean 'prefer'?
>> Â Â 194 |Â Â Â Â w.second.get_executor().defer(std::move(f), alloc2);
>>
>> and 3 more like this. The code doing this is in
>> src/common/async/completion.h:
>>
>> Â Â void destroy_defer(std::tuple<Args...>&& args) override {
>> Â Â Â Â auto w = std::move(work);
>> Â Â Â Â auto f = bind_and_forward(std::move(handler), std::move(args));
>> Â Â Â Â RebindAlloc2 alloc2 =
>> boost::asio::get_associated_allocator(handler);
>> Â Â Â Â RebindTraits2::destroy(alloc2, this);
>> Â Â Â Â RebindTraits2::deallocate(alloc2, this, 1);
>> Â Â Â Â w.second.get_executor().defer(std::move(f), alloc2);
>> Â Â }
>>
>> Has the boost API changed? If so, how to fix the above code?
>
> This seems to be caused by some changes in Boost.ASIO, in particular its
> executors API. I'm not the maintainer and I have no knowledge of that
> part of Boost.ASIO, but you could try using the standalone defer algorithm.
>
> Instead of:
>
> Â w.second.get_executor().defer(std::move(f), alloc2);
>
> try:
>
> Â boost::asio::defer(w.second.get_executor(), std::move(f));
>
> You will need to add #include <boost/asio/defer.hpp> for this.
>
> Note: the above is completely untested.
>
> You may want to ask for help regarding ASIO on its GitHub project
> (https://github.com/chriskohlhoff/asio/). Boost.ASIO is auto-generated
> from ASIO and has the same API sans namespaces and macro names.
Hi,
Thanks for your answer, I somehow managed to fix it! :)
Cheers,
Thomas Goirand (zigo)
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk