chriskohlhoff / asio

Asio C++ Library
http://think-async.com/Asio
4.91k stars 1.22k forks source link

Boost.Asio 1.78 fails with stream_file #977

Open germandiagogomez opened 2 years ago

germandiagogomez commented 2 years ago
Using Ubuntu 20.04 
g++ (Ubuntu 11.1.0-1ubuntu1~20.04) 11.1.0
quickemu ppa added for liburing: https://github.com/quickemu-project/quickemu

When using Boost.Asio 1.78, to use the new stream_file API I had to define BOOST_ASIO_HAS_FILE by hand (not sure this is intended).

When using the new stream_file, without defining BOOST_ASIO_HAS_IO_URING I get the following compilation error, which disappears when I define BOOST_ASIO_HAS_IO_URING. However, when defining BOOST_ASIO_HAS_IO_URING the run-time gives an invalid argument error:

...
/usr/local/include/boost/asio/basic_file.hpp: At global scope:
/usr/local/include/boost/asio/basic_file.hpp:233:45: error: ‘native_handle_type’ does not name a type
  233 |   basic_file(const executor_type& ex, const native_handle_type& native_file)
      |                                             ^~~~~~~~~~~~~~~~~~
/usr/local/include/boost/asio/basic_file.hpp:255:47: error: ‘native_handle_type’ does not name a type
  255 |   basic_file(ExecutionContext& context, const native_handle_type& native_file,
      |                                               ^~~~~~~~~~~~~~~~~~
/usr/local/include/boost/asio/basic_file.hpp:468:21: error: ‘native_handle_type’ does not name a type
  468 |   void assign(const native_handle_type& native_file)
      |                     ^~~~~~~~~~~~~~~~~~
/usr/local/include/boost/asio/basic_file.hpp:484:40: error: ‘native_handle_type’ does not name a type
  484 |   BOOST_ASIO_SYNC_OP_VOID assign(const native_handle_type& native_file,
      |                                        ^~~~~~~~~~~~~~~~~~
/usr/local/include/boost/asio/basic_file.hpp:560:3: error: ‘native_handle_type’ does not name a type
  560 |   native_handle_type release()
      |   ^~~~~~~~~~~~~~~~~~
/usr/local/include/boost/asio/basic_file.hpp:588:3: error: ‘native_handle_type’ does not name a type
  588 |   native_handle_type release(boost::system::error_code& ec)
      |   ^~~~~~~~~~~~~~~~~~
/usr/local/include/boost/asio/basic_file.hpp:599:3: error: ‘native_handle_type’ does not name a type
  599 |   native_handle_type native_handle()
      |   ^~~~~~~~~~~~~~~~~~
/usr/local/include/boost/asio/basic_file.hpp: In constructor ‘boost::asio::basic_file<Executor>::basic_file(const executor_type&)’:
/usr/local/include/boost/asio/basic_file.hpp:102:7: error: class ‘boost::asio::basic_file<Executor>’ does not have any field named ‘impl_’
  102 |     : impl_(0, ex)
      |       ^~~~~
/usr/local/include/boost/asio/basic_file.hpp: In constructor ‘boost::asio::basic_file<Executor>::basic_file(ExecutionContext&, typename boost::asio::constraint<std::is_convertible<ExecutionContext&, boost::asio::execution_context&>::value, boost::asio::defaulted_constraint>::type)’:
/usr/local/include/boost/asio/basic_file.hpp:120:7: error: class ‘boost::asio::basic_file<Executor>’ does not have any field named ‘impl_’
  120 |     : impl_(0, 0, context)
      |       ^~~~~
/usr/local/include/boost/asio/basic_file.hpp: In constructor ‘boost::asio::basic_file<Executor>::basic_file(const executor_type&, const char*, boost::asio::file_base::flags)’:
/usr/local/include/boost/asio/basic_file.hpp:138:7: error: class ‘boost::asio::basic_file<Executor>’ does not have any field named ‘impl_’
  138 |     : impl_(0, ex)
      |       ^~~~~
/usr/local/include/boost/asio/basic_file.hpp:141:5: error: ‘impl_’ was not declared in this scope; did you mean ‘mpl_’?
  141 |     impl_.get_service().open(impl_.get_implementation(), path, open_flags, ec);
      |     ^~~~~
      |     mpl_
/usr/local/include/boost/asio/basic_file.hpp: In constructor ‘boost::asio::basic_file<Executor>::basic_file(ExecutionContext&, const char*, boost::asio::file_base::flags, typename boost::asio::constraint<std::is_convertible<ExecutionContext&, boost::asio::execution_context&>::value, boost::asio::defaulted_constraint>::type)’:
/usr/local/include/boost/asio/basic_file.hpp:165:7: error: class ‘boost::asio::basic_file<Executor>’ does not have any field named ‘impl_’
  165 |     : impl_(0, 0, context)
      |       ^~~~~
/usr/local/include/boost/asio/basic_file.hpp:168:5: error: ‘impl_’ was not declared in this scope; did you mean ‘mpl_’?
  168 |     impl_.get_service().open(impl_.get_implementation(), path, open_flags, ec);
      |     ^~~~~
      |     mpl_
/usr/local/include/boost/asio/basic_file.hpp: In constructor ‘boost::asio::basic_file<Executor>::basic_file(const executor_type&, const string&, boost::asio::file_base::flags)’:
/usr/local/include/boost/asio/basic_file.hpp:186:7: error: class ‘boost::asio::basic_file<Executor>’ does not have any field named ‘impl_’
  186 |     : impl_(0, ex)
      |       ^~~~~
/usr/local/include/boost/asio/basic_file.hpp:189:5: error: ‘impl_’ was not declared in this scope; did you mean ‘mpl_’?
  189 |     impl_.get_service().open(impl_.get_implementation(),
      |     ^~~~~
      |     mpl_
/usr/local/include/boost/asio/basic_file.hpp: In constructor ‘boost::asio::basic_file<Executor>::basic_file(ExecutionContext&, const string&, boost::asio::file_base::flags, typename boost::asio::constraint<std::is_convertible<ExecutionContext&, boost::asio::execution_context&>::value, boost::asio::defaulted_constraint>::type)’:
/usr/local/include/boost/asio/basic_file.hpp:214:7: error: class ‘boost::asio::basic_file<Executor>’ does not have any field named ‘impl_’
  214 |     : impl_(0, 0, context)
      |       ^~~~~
/usr/local/include/boost/asio/basic_file.hpp:217:5: error: ‘impl_’ was not declared in this scope; did you mean ‘mpl_’?
  217 |     impl_.get_service().open(impl_.get_implementation(),
      |     ^~~~~
      |     mpl_
/usr/local/include/boost/asio/basic_file.hpp: In constructor ‘boost::asio::basic_file<Executor>::basic_file(const executor_type&, const int&)’:
/usr/local/include/boost/asio/basic_file.hpp:234:7: error: class ‘boost::asio::basic_file<Executor>’ does not have any field named ‘impl_’
  234 |     : impl_(0, ex)
      |       ^~~~~
/usr/local/include/boost/asio/basic_file.hpp:237:5: error: ‘impl_’ was not declared in this scope; did you mean ‘mpl_’?
  237 |     impl_.get_service().assign(
      |     ^~~~~
      |     mpl_
/usr/local/include/boost/asio/basic_file.hpp: In constructor ‘boost::asio::basic_file<Executor>::basic_file(ExecutionContext&, const int&, typename boost::asio::constraint<std::is_convertible<ExecutionContext&, boost::asio::execution_context&>::value, boost::asio::defaulted_constraint>::type)’:
/usr/local/include/boost/asio/basic_file.hpp:260:7: error: class ‘boost::asio::basic_file<Executor>’ does not have any field named ‘impl_’
  260 |     : impl_(0, 0, context)
      |       ^~~~~
/usr/local/include/boost/asio/basic_file.hpp:263:5: error: ‘impl_’ was not declared in this scope; did you mean ‘mpl_’?
  263 |     impl_.get_service().assign(
      |     ^~~~~
      |     mpl_
/usr/local/include/boost/asio/basic_file.hpp: In constructor ‘boost::asio::basic_file<Executor>::basic_file(boost::asio::basic_file<Executor>&&)’:
/usr/local/include/boost/asio/basic_file.hpp:280:7: error: class ‘boost::asio::basic_file<Executor>’ does not have any field named ‘impl_’
  280 |     : impl_(std::move(other.impl_))
      |       ^~~~~
/usr/local/include/boost/asio/basic_file.hpp: In member function ‘boost::asio::basic_file<Executor>& boost::asio::basic_file<Executor>::operator=(boost::asio::basic_file<Executor>&&)’:
/usr/local/include/boost/asio/basic_file.hpp:296:5: error: ‘impl_’ was not declared in this scope; did you mean ‘mpl_’?
  296 |     impl_ = std::move(other.impl_);
      |     ^~~~~
      |     mpl_
/usr/local/include/boost/asio/basic_file.hpp: In constructor ‘boost::asio::basic_file<Executor>::basic_file(boost::asio::basic_file<Executor1>&&, typename boost::asio::constraint<std::is_convertible<_Up, _Tp>::value, boost::asio::defaulted_constraint>::type)’:
/usr/local/include/boost/asio/basic_file.hpp:320:7: error: class ‘boost::asio::basic_file<Executor>’ does not have any field named ‘impl_’
  320 |     : impl_(std::move(other.impl_))
      |       ^~~~~
/usr/local/include/boost/asio/basic_file.hpp: In member function ‘typename boost::asio::constraint<std::is_convertible<_Up, _Tp>::value, boost::asio::basic_file<Executor>&>::type boost::asio::basic_file<Executor>::operator=(boost::asio::basic_file<Executor1>&&)’:
/usr/local/include/boost/asio/basic_file.hpp:341:5: error: ‘impl_’ was not declared in this scope; did you mean ‘mpl_’?
  341 |     impl_ = std::move(tmp.impl_);
      |     ^~~~~
      |     mpl_
/usr/local/include/boost/asio/basic_file.hpp: In member function ‘boost::asio::basic_file<Executor>::executor_type boost::asio::basic_file<Executor>::get_executor()’:
/usr/local/include/boost/asio/basic_file.hpp:349:12: error: ‘impl_’ was not declared in this scope; did you mean ‘mpl_’?
  349 |     return impl_.get_executor();
      |            ^~~~~
      |            mpl_
/usr/local/include/boost/asio/basic_file.hpp: In member function ‘void boost::asio::basic_file<Executor>::open(const char*, boost::asio::file_base::flags)’:
/usr/local/include/boost/asio/basic_file.hpp:372:5: error: ‘impl_’ was not declared in this scope; did you mean ‘mpl_’?
  372 |     impl_.get_service().open(impl_.get_implementation(), path, open_flags, ec);
      |     ^~~~~
      |     mpl_
/usr/local/include/boost/asio/basic_file.hpp: In member function ‘boost::system::error_code boost::asio::basic_file<Executor>::open(const char*, boost::asio::file_base::flags, boost::system::error_code&)’:
/usr/local/include/boost/asio/basic_file.hpp:401:5: error: ‘impl_’ was not declared in this scope; did you mean ‘mpl_’?
  401 |     impl_.get_service().open(impl_.get_implementation(), path, open_flags, ec);
      |     ^~~~~
      |     mpl_
/usr/local/include/boost/asio/basic_file.hpp: In member function ‘void boost::asio::basic_file<Executor>::open(const string&, boost::asio::file_base::flags)’:
/usr/local/include/boost/asio/basic_file.hpp:425:5: error: ‘impl_’ was not declared in this scope; did you mean ‘mpl_’?
  425 |     impl_.get_service().open(impl_.get_implementation(),
      |     ^~~~~
      |     mpl_
/usr/local/include/boost/asio/basic_file.hpp: In member function ‘boost::system::error_code boost::asio::basic_file<Executor>::open(const string&, boost::asio::file_base::flags, boost::system::error_code&)’:
/usr/local/include/boost/asio/basic_file.hpp:455:5: error: ‘impl_’ was not declared in this scope; did you mean ‘mpl_’?
  455 |     impl_.get_service().open(impl_.get_implementation(),
      |     ^~~~~
      |     mpl_
/usr/local/include/boost/asio/basic_file.hpp: In member function ‘void boost::asio::basic_file<Executor>::assign(const int&)’:
/usr/local/include/boost/asio/basic_file.hpp:471:5: error: ‘impl_’ was not declared in this scope; did you mean ‘mpl_’?
  471 |     impl_.get_service().assign(
      |     ^~~~~
      |     mpl_
/usr/local/include/boost/asio/basic_file.hpp: In member function ‘boost::system::error_code boost::asio::basic_file<Executor>::assign(const int&, boost::system::error_code&)’:
/usr/local/include/boost/asio/basic_file.hpp:487:5: error: ‘impl_’ was not declared in this scope; did you mean ‘mpl_’?
  487 |     impl_.get_service().assign(
      |     ^~~~~
      |     mpl_
/usr/local/include/boost/asio/basic_file.hpp: In member function ‘bool boost::asio::basic_file<Executor>::is_open() const’:
/usr/local/include/boost/asio/basic_file.hpp:495:12: error: ‘impl_’ was not declared in this scope; did you mean ‘mpl_’?
  495 |     return impl_.get_service().is_open(impl_.get_implementation());
      |            ^~~~~
      |            mpl_
/usr/local/include/boost/asio/basic_file.hpp: In member function ‘void boost::asio::basic_file<Executor>::close()’:
/usr/local/include/boost/asio/basic_file.hpp:510:5: error: ‘impl_’ was not declared in this scope; did you mean ‘mpl_’?
  510 |     impl_.get_service().close(impl_.get_implementation(), ec);
      |     ^~~~~
      |     mpl_
/usr/local/include/boost/asio/basic_file.hpp: In member function ‘boost::system::error_code boost::asio::basic_file<Executor>::close(boost::system::error_code&)’:
/usr/local/include/boost/asio/basic_file.hpp:537:5: error: ‘impl_’ was not declared in this scope; did you mean ‘mpl_’?
  537 |     impl_.get_service().close(impl_.get_implementation(), ec);
      |     ^~~~~
      |     mpl_
/usr/local/include/boost/asio/basic_file.hpp: In member function ‘void boost::asio::basic_file<Executor>::cancel()’:
/usr/local/include/boost/asio/basic_file.hpp:642:5: error: ‘impl_’ was not declared in this scope; did you mean ‘mpl_’?
  642 |     impl_.get_service().cancel(impl_.get_implementation(), ec);
      |     ^~~~~
      |     mpl_
/usr/local/include/boost/asio/basic_file.hpp: In member function ‘boost::system::error_code boost::asio::basic_file<Executor>::cancel(boost::system::error_code&)’:
/usr/local/include/boost/asio/basic_file.hpp:683:5: error: ‘impl_’ was not declared in this scope; did you mean ‘mpl_’?
  683 |     impl_.get_service().cancel(impl_.get_implementation(), ec);
      |     ^~~~~
      |     mpl_
/usr/local/include/boost/asio/basic_file.hpp: In member function ‘uint64_t boost::asio::basic_file<Executor>::size() const’:
/usr/local/include/boost/asio/basic_file.hpp:696:18: error: ‘impl_’ was not declared in this scope; did you mean ‘mpl_’?
  696 |     uint64_t s = impl_.get_service().size(impl_.get_implementation(), ec);
      |                  ^~~~~
      |                  mpl_
/usr/local/include/boost/asio/basic_file.hpp: In member function ‘uint64_t boost::asio::basic_file<Executor>::size(boost::system::error_code&) const’:
/usr/local/include/boost/asio/basic_file.hpp:709:12: error: ‘impl_’ was not declared in this scope; did you mean ‘mpl_’?
  709 |     return impl_.get_service().size(impl_.get_implementation(), ec);
      |            ^~~~~
      |            mpl_
/usr/local/include/boost/asio/basic_file.hpp: In member function ‘void boost::asio::basic_file<Executor>::resize(uint64_t)’:
/usr/local/include/boost/asio/basic_file.hpp:726:5: error: ‘impl_’ was not declared in this scope; did you mean ‘mpl_’?
  726 |     impl_.get_service().resize(impl_.get_implementation(), n, ec);
      |     ^~~~~
      |     mpl_
/usr/local/include/boost/asio/basic_file.hpp: In member function ‘boost::system::error_code boost::asio::basic_file<Executor>::resize(uint64_t, boost::system::error_code&)’:
/usr/local/include/boost/asio/basic_file.hpp:743:5: error: ‘impl_’ was not declared in this scope; did you mean ‘mpl_’?
  743 |     impl_.get_service().resize(impl_.get_implementation(), n, ec);
      |     ^~~~~
      |     mpl_
/usr/local/include/boost/asio/basic_file.hpp: In member function ‘void boost::asio::basic_file<Executor>::sync_all()’:
/usr/local/include/boost/asio/basic_file.hpp:757:5: error: ‘impl_’ was not declared in this scope; did you mean ‘mpl_’?
  757 |     impl_.get_service().sync_all(impl_.get_implementation(), ec);
      |     ^~~~~
      |     mpl_
/usr/local/include/boost/asio/basic_file.hpp: In member function ‘boost::system::error_code boost::asio::basic_file<Executor>::sync_all(boost::system::error_code&)’:
/usr/local/include/boost/asio/basic_file.hpp:770:5: error: ‘impl_’ was not declared in this scope; did you mean ‘mpl_’?
  770 |     impl_.get_service().sync_all(impl_.get_implementation(), ec);
      |     ^~~~~
      |     mpl_
/usr/local/include/boost/asio/basic_file.hpp: In member function ‘void boost::asio::basic_file<Executor>::sync_data()’:
/usr/local/include/boost/asio/basic_file.hpp:784:5: error: ‘impl_’ was not declared in this scope; did you mean ‘mpl_’?
  784 |     impl_.get_service().sync_data(impl_.get_implementation(), ec);
      |     ^~~~~
      |     mpl_
/usr/local/include/boost/asio/basic_file.hpp: In member function ‘boost::system::error_code boost::asio::basic_file<Executor>::sync_data(boost::system::error_code&)’:
/usr/local/include/boost/asio/basic_file.hpp:797:5: error: ‘impl_’ was not declared in this scope; did you mean ‘mpl_’?
  797 |     impl_.get_service().sync_data(impl_.get_implementation(), ec);
      |     ^~~~~
      |     mpl_
In file included from /usr/local/include/boost/asio/stream_file.hpp:23,
                 from ../src/count_words/count_words.cpp:6:
/usr/local/include/boost/asio/basic_stream_file.hpp: In instantiation of ‘class boost::asio::basic_stream_file<>’:
../src/count_words/count_words.cpp:60:33:   required from here
/usr/local/include/boost/asio/basic_stream_file.hpp:77:61: error: no type named ‘native_handle_type’ in ‘class boost::asio::basic_file<boost::asio::any_io_executor>’
   77 |   typedef typename basic_file<Executor>::native_handle_type native_handle_type;
      |                                                             ^~~~~~~~~~~~~~~~~~
../src/count_words/count_words.cpp: In function ‘r::s::WordsCountMap r::s::count_all_words_in(const std::filesystem::__cxx11::path&, const AlgorithmOptions&)’:
../src/count_words/count_words.cpp:150:30: warning: ‘std::vector<std::__cxx11::basic_string<char> > r::s::read_words(const std::filesystem::__cxx11::path&, int)’ is deprecated: Use read_file and split_into_words together to replace this call [-Wdeprecated-declarations]
  150 |   auto all_words = read_words(file, read_buf_size);
      |                    ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
../src/count_words/count_words.cpp:120:26: note: declared here
  120 | std::vector<std::string> read_words(const std::filesystem::path &p,
      |                          ^~~~~~~~~~
In file included from /usr/local/include/boost/asio/stream_file.hpp:23,
                 from ../src/count_words/count_words.cpp:6:
/usr/local/include/boost/asio/basic_stream_file.hpp: In instantiation of ‘boost::asio::basic_stream_file<Executor>::basic_stream_file(const executor_type&, const char*, boost::asio::file_base::flags) [with Executor = boost::asio::any_io_executor; boost::asio::basic_stream_file<Executor>::executor_type = boost::asio::any_io_executor]’:
../src/count_words/count_words.cpp:61:102:   required from here
/usr/local/include/boost/asio/basic_stream_file.hpp:135:11: error: ‘class boost::asio::basic_stream_file<>’ has no member named ‘impl_’
  135 |     this->impl_.get_service().set_is_stream(
      |     ~~~~~~^~~~~
/usr/local/include/boost/asio/basic_stream_file.hpp:136:15: error: ‘class boost::asio::basic_stream_file<>’ has no member named ‘impl_’
  136 |         this->impl_.get_implementation(), true);
      |         ~~~~~~^~~~~
/usr/local/include/boost/asio/basic_stream_file.hpp:137:11: error: ‘class boost::asio::basic_stream_file<>’ has no member named ‘impl_’
  137 |     this->impl_.get_service().open(
      |     ~~~~~~^~~~~
/usr/local/include/boost/asio/basic_stream_file.hpp:138:15: error: ‘class boost::asio::basic_stream_file<>’ has no member named ‘impl_’
  138 |         this->impl_.get_implementation(),
      |         ~~~~~~^~~~~
/usr/local/include/boost/asio/basic_stream_file.hpp: In instantiation of ‘void boost::asio::basic_stream_file<Executor>::initiate_async_read_some::operator()(ReadHandler&&, const MutableBufferSequence&) const [with ReadHandler = boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, boost::system::error_code, long unsigned int>; MutableBufferSequence = boost::asio::mutable_buffers_1; Executor = boost::asio::any_io_executor]’:
/usr/local/include/boost/asio/impl/use_awaitable.hpp:275:30:   required from ‘boost::asio::async_result<boost::asio::use_awaitable_t<>, void(boost::system::error_code, long unsigned int)>::_ZN5boost4asio12async_resultINS0_15use_awaitable_tINS0_15any_io_executorEEEJFvNS_6system10error_codeEmEEE8initiateINS0_17basic_stream_fileIS3_E24initiate_async_read_someEJNS0_17mutable_buffers_1EEEENS0_9awaitableImS3_EET_S4_DpT0_.actor(boost::asio::async_result<boost::asio::use_awaitable_t<>, void(boost::system::error_code, long unsigned int)>::initiate<boost::asio::basic_stream_file<>::initiate_async_read_some, boost::asio::mutable_buffers_1>(boost::asio::basic_stream_file<>::initiate_async_read_some, boost::asio::use_awaitable_t<>, boost::asio::mutable_buffers_1)::_ZN5boost4asio12async_resultINS0_15use_awaitable_tINS0_15any_io_executorEEEJFvNS_6system10error_codeEmEEE8initiateINS0_17basic_stream_fileIS3_E24initiate_async_read_someEJNS0_17mutable_buffers_1EEEENS0_9awaitableImS3_EET_S4_DpT0_.frame*)::<lambda(auto:43*)> [with auto:43 = boost::asio::detail::awaitable_frame_base<boost::asio::any_io_executor>]’
/usr/include/c++/11/type_traits:2466:26:   required by substitution of ‘template<class _Fn, class ... _Args> static std::__result_of_success<decltype (declval<_Fn>()((declval<_Args>)()...)), std::__invoke_other> std::__result_of_other_impl::_S_test(int) [with _Fn = boost::asio::async_result<boost::asio::use_awaitable_t<>, void(boost::system::error_code, long unsigned int)>::_ZN5boost4asio12async_resultINS0_15use_awaitable_tINS0_15any_io_executorEEEJFvNS_6system10error_codeEmEEE8initiateINS0_17basic_stream_fileIS3_E24initiate_async_read_someEJNS0_17mutable_buffers_1EEEENS0_9awaitableImS3_EET_S4_DpT0_.actor(boost::asio::async_result<boost::asio::use_awaitable_t<>, void(boost::system::error_code, long unsigned int)>::initiate<boost::asio::basic_stream_file<>::initiate_async_read_some, boost::asio::mutable_buffers_1>(boost::asio::basic_stream_file<>::initiate_async_read_some, boost::asio::use_awaitable_t<>, boost::asio::mutable_buffers_1)::_ZN5boost4asio12async_resultINS0_15use_awaitable_tINS0_15any_io_executorEEEJFvNS_6system10error_codeEmEEE8initiateINS0_17basic_stream_fileIS3_E24initiate_async_read_someEJNS0_17mutable_buffers_1EEEENS0_9awaitableImS3_EET_S4_DpT0_.frame*)::<lambda(auto:43*)>; _Args = {boost::asio::detail::awaitable_frame_base<boost::asio::any_io_executor>*}]’
/usr/include/c++/11/type_traits:2477:55:   required from ‘struct std::__result_of_impl<false, false, boost::asio::async_result<boost::asio::use_awaitable_t<>, void(boost::system::error_code, long unsigned int)>::_ZN5boost4asio12async_resultINS0_15use_awaitable_tINS0_15any_io_executorEEEJFvNS_6system10error_codeEmEEE8initiateINS0_17basic_stream_fileIS3_E24initiate_async_read_someEJNS0_17mutable_buffers_1EEEENS0_9awaitableImS3_EET_S4_DpT0_.actor(boost::asio::async_result<boost::asio::use_awaitable_t<>, void(boost::system::error_code, long unsigned int)>::initiate<boost::asio::basic_stream_file<>::initiate_async_read_some, boost::asio::mutable_buffers_1>(boost::asio::basic_stream_file<>::initiate_async_read_some, boost::asio::use_awaitable_t<>, boost::asio::mutable_buffers_1)::_ZN5boost4asio12async_resultINS0_15use_awaitable_tINS0_15any_io_executorEEEJFvNS_6system10error_codeEmEEE8initiateINS0_17basic_stream_fileIS3_E24initiate_async_read_someEJNS0_17mutable_buffers_1EEEENS0_9awaitableImS3_EET_S4_DpT0_.frame*)::<lambda(auto:43*)>, boost::asio::detail::awaitable_frame_base<boost::asio::any_io_executor>*>’
/usr/include/c++/11/type_traits:2482:12:   required from ‘struct std::__invoke_result<boost::asio::async_result<boost::asio::use_awaitable_t<>, void(boost::system::error_code, long unsigned int)>::_ZN5boost4asio12async_resultINS0_15use_awaitable_tINS0_15any_io_executorEEEJFvNS_6system10error_codeEmEEE8initiateINS0_17basic_stream_fileIS3_E24initiate_async_read_someEJNS0_17mutable_buffers_1EEEENS0_9awaitableImS3_EET_S4_DpT0_.actor(boost::asio::async_result<boost::asio::use_awaitable_t<>, void(boost::system::error_code, long unsigned int)>::initiate<boost::asio::basic_stream_file<>::initiate_async_read_some, boost::asio::mutable_buffers_1>(boost::asio::basic_stream_file<>::initiate_async_read_some, boost::asio::use_awaitable_t<>, boost::asio::mutable_buffers_1)::_ZN5boost4asio12async_resultINS0_15use_awaitable_tINS0_15any_io_executorEEEJFvNS_6system10error_codeEmEEE8initiateINS0_17basic_stream_fileIS3_E24initiate_async_read_someEJNS0_17mutable_buffers_1EEEENS0_9awaitableImS3_EET_S4_DpT0_.frame*)::<lambda(auto:43*)>, boost::asio::detail::awaitable_frame_base<boost::asio::any_io_executor>*>’
/usr/include/c++/11/type_traits:2495:12:   required from ‘struct std::result_of<boost::asio::async_result<boost::asio::use_awaitable_t<>, void(boost::system::error_code, long unsigned int)>::_ZN5boost4asio12async_resultINS0_15use_awaitable_tINS0_15any_io_executorEEEJFvNS_6system10error_codeEmEEE8initiateINS0_17basic_stream_fileIS3_E24initiate_async_read_someEJNS0_17mutable_buffers_1EEEENS0_9awaitableImS3_EET_S4_DpT0_.actor(boost::asio::async_result<boost::asio::use_awaitable_t<>, void(boost::system::error_code, long unsigned int)>::initiate<boost::asio::basic_stream_file<>::initiate_async_read_some, boost::asio::mutable_buffers_1>(boost::asio::basic_stream_file<>::initiate_async_read_some, boost::asio::use_awaitable_t<>, boost::asio::mutable_buffers_1)::_ZN5boost4asio12async_resultINS0_15use_awaitable_tINS0_15any_io_executorEEEJFvNS_6system10error_codeEmEEE8initiateINS0_17basic_stream_fileIS3_E24initiate_async_read_someEJNS0_17mutable_buffers_1EEEENS0_9awaitableImS3_EET_S4_DpT0_.frame*)::<lambda(auto:43*)>(boost::asio::detail::awaitable_frame_base<boost::asio::any_io_executor>*)>’
/usr/local/include/boost/asio/impl/awaitable.hpp:370:8:   required by substitution of ‘template<class Function> auto boost::asio::detail::awaitable_frame_base<boost::asio::any_io_executor>::await_transform<Function>(Function, typename std::enable_if<std::is_convertible<typename std::result_of<Function(boost::asio::detail::awaitable_frame_base<boost::asio::any_io_executor>*)>::type, boost::asio::detail::awaitable_thread<boost::asio::any_io_executor>*>::value, void>::type*) [with Function = boost::asio::async_result<boost::asio::use_awaitable_t<>, void(boost::system::error_code, long unsigned int)>::_ZN5boost4asio12async_resultINS0_15use_awaitable_tINS0_15any_io_executorEEEJFvNS_6system10error_codeEmEEE8initiateINS0_17basic_stream_fileIS3_E24initiate_async_read_someEJNS0_17mutable_buffers_1EEEENS0_9awaitableImS3_EET_S4_DpT0_.actor(boost::asio::async_result<boost::asio::use_awaitable_t<>, void(boost::system::error_code, long unsigned int)>::initiate<boost::asio::basic_stream_file<>::initiate_async_read_some, boost::asio::mutable_buffers_1>(boost::asio::basic_stream_file<>::initiate_async_read_some, boost::asio::use_awaitable_t<>, boost::asio::mutable_buffers_1)::_ZN5boost4asio12async_resultINS0_15use_awaitable_tINS0_15any_io_executorEEEJFvNS_6system10error_codeEmEEE8initiateINS0_17basic_stream_fileIS3_E24initiate_async_read_someEJNS0_17mutable_buffers_1EEEENS0_9awaitableImS3_EET_S4_DpT0_.frame*)::<lambda(auto:43*)>]’
/usr/local/include/boost/asio/impl/use_awaitable.hpp:271:5:   required from ‘static boost::asio::async_result<boost::asio::use_awaitable_t<Executor>, R(Args ...)>::return_type boost::asio::async_result<boost::asio::use_awaitable_t<Executor>, R(Args ...)>::initiate(Initiation, boost::asio::use_awaitable_t<Executor>, InitArgs ...) [with Initiation = boost::asio::basic_stream_file<>::initiate_async_read_some; InitArgs = {boost::asio::mutable_buffers_1}; Executor = boost::asio::any_io_executor; R = void; Args = {boost::system::error_code, long unsigned int}; boost::asio::async_result<boost::asio::use_awaitable_t<Executor>, R(Args ...)>::return_type = boost::asio::awaitable<long unsigned int, boost::asio::any_io_executor>]’
/usr/local/include/boost/asio/async_result.hpp:862:29:   required from ‘typename boost::asio::constraint<boost::asio::detail::async_result_has_initiate_memfn<CompletionToken, Signatures>::value, decltype (boost::asio::async_result<typename std::decay<_Tp>::type, Signatures ...>::initiate(declval<Initiation&&>(), declval<CompletionToken&&>(), (declval<Args&&>)()...))>::type boost::asio::async_initiate(Initiation&&, CompletionToken&, Args&& ...) [with CompletionToken = const boost::asio::use_awaitable_t<>&; Signatures = {void(boost::system::error_code, long unsigned int)}; Initiation = boost::asio::basic_stream_file<>::initiate_async_read_some; Args = {const boost::asio::mutable_buffers_1&}; typename boost::asio::constraint<boost::asio::detail::async_result_has_initiate_memfn<CompletionToken, Signatures>::value, decltype (boost::asio::async_result<typename std::decay<_Tp>::type, Signatures ...>::initiate(declval<Initiation&&>(), declval<CompletionToken&&>(), (declval<Args&&>)()...))>::type = boost::asio::awaitable<long unsigned int, boost::asio::any_io_executor>; decltype (boost::asio::async_result<typename std::decay<_Tp>::type, Signatures ...>::initiate(declval<Initiation&&>(), declval<CompletionToken&&>(), (declval<Args&&>)()...)) = boost::asio::awaitable<long unsigned int, boost::asio::any_io_executor>; typename std::decay<_Tp>::type = std::decay<const boost::asio::use_awaitable_t<>&>::type]’
/usr/local/include/boost/asio/basic_stream_file.hpp:648:53:   required from ‘auto boost::asio::basic_stream_file<Executor>::async_read_some(const MutableBufferSequence&, ReadHandler&&) [with MutableBufferSequence = boost::asio::mutable_buffers_1; ReadHandler = const boost::asio::use_awaitable_t<>&; Executor = boost::asio::any_io_executor]’
../src/count_words/count_words.cpp:73:51:   required from here
/usr/local/include/boost/asio/basic_stream_file.hpp:714:14: error: ‘class boost::asio::basic_stream_file<>’ has no member named ‘impl_’
  714 |       self_->impl_.get_service().async_read_some(
      |       ~~~~~~~^~~~~
/usr/local/include/boost/asio/basic_stream_file.hpp:715:18: error: ‘class boost::asio::basic_stream_file<>’ has no member named ‘impl_’
  715 |           self_->impl_.get_implementation(), buffers,
      |           ~~~~~~~^~~~~
/usr/local/include/boost/asio/basic_stream_file.hpp:716:34: error: ‘class boost::asio::basic_stream_file<>’ has no member named ‘impl_’
  716 |           handler2.value, self_->impl_.get_executor());
      |                           ~~~~~~~^~~~~
...
germandiagogomez commented 2 years ago

I tried with standalone Asio as well. Same problem as in my original post at the toop-level without ASIO_HAS_IO_URING. With ASIO_HAS_IO_URING I get another compilation error, though (it does not even compile, unlike with Boost version, which compiles but I seem to have run-time problems):

In file included from /usr/local/include/asio/detail/impl/scheduler.ipp:28,
                 from /usr/local/include/asio/detail/scheduler.hpp:238,
                 from /usr/local/include/asio/system_context.hpp:19,
                 from /usr/local/include/asio/impl/system_executor.hpp:21,
                 from /usr/local/include/asio/system_executor.hpp:682,
                 from /usr/local/include/asio/associated_executor.hpp:24,
                 from /usr/local/include/asio.hpp:19,
                 from ../src/count_words/count_words.hpp:24,
                 from ../programs/words_counter.cpp:1:
/usr/local/include/asio/detail/io_uring_service.hpp: At global scope:
/usr/local/include/asio/detail/io_uring_service.hpp:297:3: error: ‘reactor’ does not name a type
  297 |   reactor& reactor_;
      |   ^~~~~~~
/usr/local/include/asio/detail/io_uring_service.hpp:300:3: error: ‘reactor’ does not name a type
  300 |   reactor::per_descriptor_data reactor_data_;
      |   ^~~~~~~
In file included from /usr/local/include/asio/detail/io_uring_service.hpp:313,
                 from /usr/local/include/asio/detail/impl/scheduler.ipp:28,
                 from /usr/local/include/asio/detail/scheduler.hpp:238,
                 from /usr/local/include/asio/system_context.hpp:19,
                 from /usr/local/include/asio/impl/system_executor.hpp:21,
                 from /usr/local/include/asio/system_executor.hpp:682,
                 from /usr/local/include/asio/associated_executor.hpp:24,
                 from /usr/local/include/asio.hpp:19,
                 from ../src/count_words/count_words.hpp:24,
                 from ../programs/words_counter.cpp:1:
/usr/local/include/asio/detail/impl/io_uring_service.ipp: In constructor ‘asio::detail::io_uring_service::io_uring_service(asio::execution_context&)’:
/usr/local/include/asio/detail/impl/io_uring_service.ipp:46:5: error: class ‘asio::detail::io_uring_service’ does not have any field named ‘reactor_’
   46 |     reactor_(use_service<reactor>(ctx)),
      |     ^~~~~~~~
/usr/local/include/asio/detail/impl/io_uring_service.ipp:46:26: error: ‘reactor’ was not declared in this scope
   46 |     reactor_(use_service<reactor>(ctx)),
      |                          ^~~~~~~
/usr/local/include/asio/detail/impl/io_uring_service.ipp:46:34: error: no matching function for call to ‘use_service<<expression error> >(asio::execution_context&)’
   46 |     reactor_(use_service<reactor>(ctx)),
      |              ~~~~~~~~~~~~~~~~~~~~^~~~~
In file included from /usr/local/include/asio/execution_context.hpp:407,
                 from /usr/local/include/asio/detail/scheduler.hpp:21,
                 from /usr/local/include/asio/system_context.hpp:19,
                 from /usr/local/include/asio/impl/system_executor.hpp:21,
                 from /usr/local/include/asio/system_executor.hpp:682,
                 from /usr/local/include/asio/associated_executor.hpp:24,
                 from /usr/local/include/asio.hpp:19,
                 from ../src/count_words/count_words.hpp:24,
                 from ../programs/words_counter.cpp:1:
/usr/local/include/asio/impl/execution_context.hpp:29:17: note: candidate: ‘template<class Service> Service& asio::use_service(asio::execution_context&)’
   29 | inline Service& use_service(execution_context& e)
      |                 ^~~~~~~~~~~
/usr/local/include/asio/impl/execution_context.hpp:29:17: note:   template argument deduction/substitution failed:
In file included from /usr/local/include/asio/detail/io_uring_service.hpp:313,
                 from /usr/local/include/asio/detail/impl/scheduler.ipp:28,
                 from /usr/local/include/asio/detail/scheduler.hpp:238,
                 from /usr/local/include/asio/system_context.hpp:19,
                 from /usr/local/include/asio/impl/system_executor.hpp:21,
                 from /usr/local/include/asio/system_executor.hpp:682,
                 from /usr/local/include/asio/associated_executor.hpp:24,
                 from /usr/local/include/asio.hpp:19,
                 from ../src/count_words/count_words.hpp:24,
                 from ../programs/words_counter.cpp:1:
/usr/local/include/asio/detail/impl/io_uring_service.ipp:46:34: error: template argument 1 is invalid
   46 |     reactor_(use_service<reactor>(ctx)),
      |              ~~~~~~~~~~~~~~~~~~~~^~~~~
In file included from /usr/local/include/asio/detail/scheduler.hpp:21,
                 from /usr/local/include/asio/system_context.hpp:19,
                 from /usr/local/include/asio/impl/system_executor.hpp:21,
                 from /usr/local/include/asio/system_executor.hpp:682,
                 from /usr/local/include/asio/associated_executor.hpp:24,
                 from /usr/local/include/asio.hpp:19,
                 from ../src/count_words/count_words.hpp:24,
                 from ../programs/words_counter.cpp:1:
/usr/local/include/asio/execution_context.hpp:34:38: note: candidate: ‘template<class Service> Service& asio::use_service(asio::io_context&)’
   34 | template <typename Service> Service& use_service(io_context&);
      |                                      ^~~~~~~~~~~
/usr/local/include/asio/execution_context.hpp:34:38: note:   template argument deduction/substitution failed:
In file included from /usr/local/include/asio/detail/io_uring_service.hpp:313,
                 from /usr/local/include/asio/detail/impl/scheduler.ipp:28,
                 from /usr/local/include/asio/detail/scheduler.hpp:238,
                 from /usr/local/include/asio/system_context.hpp:19,
                 from /usr/local/include/asio/impl/system_executor.hpp:21,
                 from /usr/local/include/asio/system_executor.hpp:682,
                 from /usr/local/include/asio/associated_executor.hpp:24,
                 from /usr/local/include/asio.hpp:19,
                 from ../src/count_words/count_words.hpp:24,
                 from ../programs/words_counter.cpp:1:
/usr/local/include/asio/detail/impl/io_uring_service.ipp:46:34: error: template argument 1 is invalid
   46 |     reactor_(use_service<reactor>(ctx)),
      |              ~~~~~~~~~~~~~~~~~~~~^~~~~
/usr/local/include/asio/detail/impl/io_uring_service.ipp:47:5: error: class ‘asio::detail::io_uring_service’ does not have any field named ‘reactor_data_’
   47 |     reactor_data_(),
      |     ^~~~~~~~~~~~~
/usr/local/include/asio/detail/impl/io_uring_service.ipp:50:3: error: ‘reactor_’ was not declared in this scope
   50 |   reactor_.init_task();
      |   ^~~~~~~~