asio
asio copied to clipboard
experimental/awaitable_operators build failure with BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT
Version: Boost 1.84 Compiler: clang++16, under Ubuntu 22.04, -std=c++20, debug
Sample program:
#define BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT
#include <boost/asio/any_io_executor.hpp>
#include <boost/asio/awaitable.hpp>
#include <boost/asio/experimental/awaitable_operators.hpp>
#include <boost/asio/steady_timer.hpp>
#include <boost/asio/use_awaitable.hpp>
namespace asio = boost::asio;
asio::awaitable<void> f(asio::steady_timer& tim)
{
using namespace boost::asio::experimental::awaitable_operators;
co_await (tim.async_wait(asio::use_awaitable) || tim.async_wait(asio::use_awaitable));
}
Fails with the following error:
[build] In file included from /home/ruben/workspace/mysql/private/test-programs/testground/main.cpp:5:
[build] In file included from /opt/boost-1.84.0/include/boost/asio/experimental/awaitable_operators.hpp:27:
[build] In file included from /opt/boost-1.84.0/include/boost/asio/experimental/parallel_group.hpp:456:
[build] /opt/boost-1.84.0/include/boost/asio/experimental/impl/parallel_group.hpp:135:17: error: field has incomplete type 'executor_type' (aka 'void')
[build] executor_type executor_;
[build] ^
[build] /opt/boost-1.84.0/include/boost/asio/experimental/impl/parallel_group.hpp:183:54: note: in instantiation of template class 'boost::asio::experimental::detail::parallel_group_completion_handler<boost::asio::detail::awaitable_async_op_handler<void (std::array<unsigned long, 2>, std::__exception_ptr::exception_ptr, std::__exception_ptr::exception_ptr), boost::asio::executor>, boost::asio::deferred_async_operation<void (std::__exception_ptr::exception_ptr), boost::asio::detail::initiate_co_spawn<boost::asio::executor>, boost::asio::detail::awaitable_as_function<void, boost::asio::executor>>, boost::asio::deferred_async_operation<void (std::__exception_ptr::exception_ptr), boost::asio::detail::initiate_co_spawn<boost::asio::executor>, boost::asio::detail::awaitable_as_function<void, boost::asio::executor>>>' requested here
[build] parallel_group_completion_handler<Handler, Ops...> handler_;
[build] ^
[build] /opt/boost-1.84.0/include/boost/asio/experimental/impl/parallel_group.hpp:386:13: note: in instantiation of template class 'boost::asio::experimental::detail::parallel_group_state<boost::asio::experimental::wait_for_one_success, boost::asio::detail::awaitable_async_op_handler<void (std::array<unsigned long, 2>, std::__exception_ptr::exception_ptr, std::__exception_ptr::exception_ptr), boost::asio::executor>, boost::asio::deferred_async_operation<void (std::__exception_ptr::exception_ptr), boost::asio::detail::initiate_co_spawn<boost::asio::executor>, boost::asio::detail::awaitable_as_function<void, boost::asio::executor>>, boost::asio::deferred_async_operation<void (std::__exception_ptr::exception_ptr), boost::asio::detail::initiate_co_spawn<boost::asio::executor>, boost::asio::detail::awaitable_as_function<void, boost::asio::executor>>>' requested here
[build] if ((state->cancellations_requested_ -= sizeof...(Ops)) > 0)
[build] ^
[build] /opt/boost-1.84.0/include/boost/asio/experimental/parallel_group.hpp:150:15: note: in instantiation of function template specialization 'boost::asio::experimental::detail::parallel_group_launch<boost::asio::experimental::wait_for_one_success, boost::asio::detail::awaitable_async_op_handler<void (std::array<unsigned long, 2>, std::__exception_ptr::exception_ptr, std::__exception_ptr::exception_ptr), boost::asio::executor>, boost::asio::deferred_async_operation<void (std::__exception_ptr::exception_ptr), boost::asio::detail::initiate_co_spawn<boost::asio::executor>, boost::asio::detail::awaitable_as_function<void, boost::asio::executor>>, boost::asio::deferred_async_operation<void (std::__exception_ptr::exception_ptr), boost::asio::detail::initiate_co_spawn<boost::asio::executor>, boost::asio::detail::awaitable_as_function<void, boost::asio::executor>>, 0UL, 1UL>' requested here
[build] detail::parallel_group_launch(
[build] ^
[build] /opt/boost-1.84.0/include/boost/asio/async_result.hpp:273:5: note: in instantiation of function template specialization 'boost::asio::experimental::parallel_group<boost::asio::deferred_async_operation<void (std::__exception_ptr::exception_ptr), boost::asio::detail::initiate_co_spawn<boost::asio::executor>, boost::asio::detail::awaitable_as_function<void, boost::asio::executor>>, boost::asio::deferred_async_operation<void (std::__exception_ptr::exception_ptr), boost::asio::detail::initiate_co_spawn<boost::asio::executor>, boost::asio::detail::awaitable_as_function<void, boost::asio::executor>>>::initiate_async_wait::operator()<boost::asio::detail::awaitable_async_op_handler<void (std::array<unsigned long, 2>, std::__exception_ptr::exception_ptr, std::__exception_ptr::exception_ptr), boost::asio::executor>, boost::asio::experimental::wait_for_one_success>' requested here
[build] static_cast<Initiation&&>(initiation)(
[build] ^
[build] /opt/boost-1.84.0/include/boost/asio/async_result.hpp:570:65: note: in instantiation of function template specialization 'boost::asio::detail::completion_handler_async_result<boost::asio::detail::awaitable_async_op_handler<void (std::array<unsigned long, 2>, std::__exception_ptr::exception_ptr, std::__exception_ptr::exception_ptr), boost::asio::executor>, void (std::array<unsigned long, 2>, std::__exception_ptr::exception_ptr, std::__exception_ptr::exception_ptr)>::initiate<boost::asio::experimental::parallel_group<boost::asio::deferred_async_operation<void (std::__exception_ptr::exception_ptr), boost::asio::detail::initiate_co_spawn<boost::asio::executor>, boost::asio::detail::awaitable_as_function<void, boost::asio::executor>>, boost::asio::deferred_async_operation<void (std::__exception_ptr::exception_ptr), boost::asio::detail::initiate_co_spawn<boost::asio::executor>, boost::asio::detail::awaitable_as_function<void, boost::asio::executor>>>::initiate_async_wait, boost::asio::detail::awaitable_async_op_handler<void (std::array<unsigned long, 2>, std::__exception_ptr::exception_ptr, std::__exception_ptr::exception_ptr), boost::asio::executor>, boost::asio::experimental::wait_for_one_success, std::tuple<boost::asio::deferred_async_operation<void (std::__exception_ptr::exception_ptr), boost::asio::detail::initiate_co_spawn<boost::asio::executor>, boost::asio::detail::awaitable_as_function<void, boost::asio::executor>>, boost::asio::deferred_async_operation<void (std::__exception_ptr::exception_ptr), boost::asio::detail::initiate_co_spawn<boost::asio::executor>, boost::asio::detail::awaitable_as_function<void, boost::asio::executor>>>>' requested here
[build] return async_result<decay_t<CompletionToken>, Signatures...>::initiate(
[build] ^
[build] /opt/boost-1.84.0/include/boost/asio/deferred.hpp:319:12: note: in instantiation of function template specialization 'boost::asio::async_initiate<boost::asio::detail::awaitable_async_op_handler<void (std::array<unsigned long, 2>, std::__exception_ptr::exception_ptr, std::__exception_ptr::exception_ptr), boost::asio::executor>, void (std::array<unsigned long, 2>, std::__exception_ptr::exception_ptr, std::__exception_ptr::exception_ptr), boost::asio::experimental::parallel_group<boost::asio::deferred_async_operation<void (std::__exception_ptr::exception_ptr), boost::asio::detail::initiate_co_spawn<boost::asio::executor>, boost::asio::detail::awaitable_as_function<void, boost::asio::executor>>, boost::asio::deferred_async_operation<void (std::__exception_ptr::exception_ptr), boost::asio::detail::initiate_co_spawn<boost::asio::executor>, boost::asio::detail::awaitable_as_function<void, boost::asio::executor>>>::initiate_async_wait, boost::asio::experimental::wait_for_one_success, std::tuple<boost::asio::deferred_async_operation<void (std::__exception_ptr::exception_ptr), boost::asio::detail::initiate_co_spawn<boost::asio::executor>, boost::asio::detail::awaitable_as_function<void, boost::asio::executor>>, boost::asio::deferred_async_operation<void (std::__exception_ptr::exception_ptr), boost::asio::detail::initiate_co_spawn<boost::asio::executor>, boost::asio::detail::awaitable_as_function<void, boost::asio::executor>>>>' requested here
[build] return async_initiate<CompletionToken, Signature>(
[build] ^
[build] /opt/boost-1.84.0/include/boost/asio/deferred.hpp:354:18: note: in instantiation of function template specialization 'boost::asio::deferred_async_operation<void (std::array<unsigned long, 2>, std::__exception_ptr::exception_ptr, std::__exception_ptr::exception_ptr), boost::asio::experimental::parallel_group<boost::asio::deferred_async_operation<void (std::__exception_ptr::exception_ptr), boost::asio::detail::initiate_co_spawn<boost::asio::executor>, boost::asio::detail::awaitable_as_function<void, boost::asio::executor>>, boost::asio::deferred_async_operation<void (std::__exception_ptr::exception_ptr), boost::asio::detail::initiate_co_spawn<boost::asio::executor>, boost::asio::detail::awaitable_as_function<void, boost::asio::executor>>>::initiate_async_wait, boost::asio::experimental::wait_for_one_success, std::tuple<boost::asio::deferred_async_operation<void (std::__exception_ptr::exception_ptr), boost::asio::detail::initiate_co_spawn<boost::asio::executor>, boost::asio::detail::awaitable_as_function<void, boost::asio::executor>>, boost::asio::deferred_async_operation<void (std::__exception_ptr::exception_ptr), boost::asio::detail::initiate_co_spawn<boost::asio::executor>, boost::asio::detail::awaitable_as_function<void, boost::asio::executor>>>>::invoke_helper<boost::asio::detail::awaitable_async_op_handler<void (std::array<unsigned long, 2>, std::__exception_ptr::exception_ptr, std::__exception_ptr::exception_ptr), boost::asio::executor>, 0UL, 1UL>' requested here
[build] return this->invoke_helper(
[build] ^
[build] /opt/boost-1.84.0/include/boost/asio/impl/awaitable.hpp:1142:11: note: in instantiation of function template specialization 'boost::asio::deferred_async_operation<void (std::array<unsigned long, 2>, std::__exception_ptr::exception_ptr, std::__exception_ptr::exception_ptr), boost::asio::experimental::parallel_group<boost::asio::deferred_async_operation<void (std::__exception_ptr::exception_ptr), boost::asio::detail::initiate_co_spawn<boost::asio::executor>, boost::asio::detail::awaitable_as_function<void, boost::asio::executor>>, boost::asio::deferred_async_operation<void (std::__exception_ptr::exception_ptr), boost::asio::detail::initiate_co_spawn<boost::asio::executor>, boost::asio::detail::awaitable_as_function<void, boost::asio::executor>>>::initiate_async_wait, boost::asio::experimental::wait_for_one_success, std::tuple<boost::asio::deferred_async_operation<void (std::__exception_ptr::exception_ptr), boost::asio::detail::initiate_co_spawn<boost::asio::executor>, boost::asio::detail::awaitable_as_function<void, boost::asio::executor>>, boost::asio::deferred_async_operation<void (std::__exception_ptr::exception_ptr), boost::asio::detail::initiate_co_spawn<boost::asio::executor>, boost::asio::detail::awaitable_as_function<void, boost::asio::executor>>>>::operator()<boost::asio::detail::awaitable_async_op_handler<void (std::array<unsigned long, 2>, std::__exception_ptr::exception_ptr, std::__exception_ptr::exception_ptr), boost::asio::executor>>' requested here
[build] std::forward<Op&&>(self->op_)(
[build] ^
[build] /opt/boost-1.84.0/include/boost/asio/experimental/awaitable_operators.hpp:259:5: note: in instantiation of member function 'boost::asio::detail::awaitable_async_op<void (std::array<unsigned long, 2>, std::__exception_ptr::exception_ptr, std::__exception_ptr::exception_ptr), boost::asio::deferred_async_operation<void (std::array<unsigned long, 2>, std::__exception_ptr::exception_ptr, std::__exception_ptr::exception_ptr), boost::asio::experimental::parallel_group<boost::asio::deferred_async_operation<void (std::__exception_ptr::exception_ptr), boost::asio::detail::initiate_co_spawn<boost::asio::executor>, boost::asio::detail::awaitable_as_function<void, boost::asio::executor>>, boost::asio::deferred_async_operation<void (std::__exception_ptr::exception_ptr), boost::asio::detail::initiate_co_spawn<boost::asio::executor>, boost::asio::detail::awaitable_as_function<void, boost::asio::executor>>>::initiate_async_wait, boost::asio::experimental::wait_for_one_success, std::tuple<boost::asio::deferred_async_operation<void (std::__exception_ptr::exception_ptr), boost::asio::detail::initiate_co_spawn<boost::asio::executor>, boost::asio::detail::awaitable_as_function<void, boost::asio::executor>>, boost::asio::deferred_async_operation<void (std::__exception_ptr::exception_ptr), boost::asio::detail::initiate_co_spawn<boost::asio::executor>, boost::asio::detail::awaitable_as_function<void, boost::asio::executor>>>>, boost::asio::executor>::await_suspend' requested here
[build] co_await make_parallel_group(
[build] ^
[build] /home/ruben/workspace/mysql/private/test-programs/testground/main.cpp:14:51: note: in instantiation of function template specialization 'boost::asio::experimental::awaitable_operators::operator||<boost::asio::executor>' requested here
[build] co_await (tim.async_wait(asio::use_awaitable) || tim.async_wait(asio::use_awaitable));
``