Skip to content

Instantly share code, notes, and snippets.

@cbodley
Created October 9, 2024 16:48
Show Gist options
  • Save cbodley/1b3a85b6281133fc8ea96dfc1b9c2f5b to your computer and use it in GitHub Desktop.
Save cbodley/1b3a85b6281133fc8ea96dfc1b9c2f5b to your computer and use it in GitHub Desktop.
asio::spawn() with move-only return value
In file included from main.cc:4:
In file included from /home/cbodley/asio/include/boost/asio.hpp:31:
In file included from /home/cbodley/asio/include/boost/asio/awaitable.hpp:140:
In file included from /home/cbodley/asio/include/boost/asio/impl/awaitable.hpp:29:
In file included from /home/cbodley/asio/include/boost/asio/post.hpp:20:
In file included from /home/cbodley/asio/include/boost/asio/detail/initiate_post.hpp:21:
In file included from /home/cbodley/asio/include/boost/asio/detail/work_dispatcher.hpp:19:
/home/cbodley/asio/include/boost/asio/detail/bind_handler.hpp:161:7: error: call to deleted constructor of 'std::unique_ptr<int>'
161 | arg2_(arg2)
| ^ ~~~~
/home/cbodley/asio/include/boost/asio/impl/spawn.hpp:911:9: note: in instantiation of member function 'boost::asio::detail::binder2<(lambda at main.cc:12:10), std::__exception_ptr::exception_ptr, std::unique_ptr<int>>::binder2' requested here
911 | handler(handler_, exception_ptr(), static_cast<T&&>(result));
| ^
/home/cbodley/asio/include/boost/asio/impl/spawn.hpp:858:11: note: in instantiation of function template specialization 'boost::asio::detail::spawn_entry_point<boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>, (lambda at main.cc:10:27), (lambda at main.cc:12:10)>::call<std::unique_ptr<int>>' requested here
858 | this->call(yield,
| ^
/home/cbodley/asio/include/boost/asio/impl/spawn.hpp:282:9: note: in instantiation of member function 'boost::asio::detail::spawn_entry_point<boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>, (lambda at main.cc:10:27), (lambda at main.cc:12:10)>::operator()' requested here
282 | function(&spawned_thread);
| ^
/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/invoke.h:61:14: note: in instantiation of member function 'boost::asio::detail::spawned_fiber_thread::entry_point<boost::asio::detail::spawn_entry_point<boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>, (lambda at main.cc:10:27), (lambda at main.cc:12:10)>>::operator()' requested here
61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); }
| ^
/usr/include/boost/context/fiber_fcontext.hpp:97:23: note: in instantiation of member function 'boost::context::detail::fiber_record<boost::context::fiber, boost::context::basic_fixedsize_stack<boost::context::stack_traits>, boost::asio::detail::spawned_fiber_thread::entry_point<boost::asio::detail::spawn_entry_point<boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>, (lambda at main.cc:10:27), (lambda at main.cc:12:10)>>>::run' requested here
97 | t.fctx = rec->run( t.fctx);
| ^
/usr/include/boost/context/fiber_fcontext.hpp:204:63: note: (skipping 5 contexts in backtrace; use -ftemplate-backtrace-limit=0 to see all)
204 | const fcontext_t fctx = make_fcontext( stack_top, size, & fiber_entry< Record >);
| ^
/home/cbodley/asio/include/boost/asio/async_result.hpp:329:5: note: in instantiation of function template specialization 'boost::asio::detail::initiate_spawn<boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>>::operator()<(lambda at main.cc:12:10), (lambda at main.cc:10:27)>' requested here
329 | static_cast<Initiation&&>(initiation)(
| ^
/home/cbodley/asio/include/boost/asio/async_result.hpp:629:65: note: in instantiation of function template specialization 'boost::asio::detail::completion_handler_async_result<(lambda at main.cc:12:10), void (std::__exception_ptr::exception_ptr, std::unique_ptr<int>)>::initiate<boost::asio::detail::initiate_spawn<boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>>, (lambda at main.cc:12:10), (lambda at main.cc:10:27)>' requested here
629 | return async_result<decay_t<CompletionToken>, Signatures...>::initiate(
| ^
/home/cbodley/asio/include/boost/asio/impl/spawn.hpp:1123:10: note: in instantiation of function template specialization 'boost::asio::async_initiate<(lambda at main.cc:12:10), void (std::__exception_ptr::exception_ptr, std::unique_ptr<int>), boost::asio::detail::initiate_spawn<boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>>, (lambda at main.cc:10:27)>' requested here
1123 | return async_initiate<CompletionToken,
| ^
/home/cbodley/asio/include/boost/asio/impl/spawn.hpp:1155:11: note: in instantiation of function template specialization 'boost::asio::spawn<boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>, (lambda at main.cc:10:27), (lambda at main.cc:12:10)>' requested here
1155 | return (spawn)(ctx.get_executor(), static_cast<F&&>(function),
| ^
main.cc:10:16: note: in instantiation of function template specialization 'boost::asio::spawn<boost::asio::io_context, (lambda at main.cc:10:27), (lambda at main.cc:12:10)>' requested here
10 | boost::asio::spawn(ctx, [] (boost::asio::yield_context yield) {
| ^
/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unique_ptr.h:516:7: note: 'unique_ptr' has been explicitly marked deleted here
516 | unique_ptr(const unique_ptr&) = delete;
| ^
In file included from main.cc:4:
In file included from /home/cbodley/asio/include/boost/asio.hpp:31:
In file included from /home/cbodley/asio/include/boost/asio/awaitable.hpp:140:
In file included from /home/cbodley/asio/include/boost/asio/impl/awaitable.hpp:29:
In file included from /home/cbodley/asio/include/boost/asio/post.hpp:20:
In file included from /home/cbodley/asio/include/boost/asio/detail/initiate_post.hpp:21:
In file included from /home/cbodley/asio/include/boost/asio/detail/work_dispatcher.hpp:19:
/home/cbodley/asio/include/boost/asio/detail/bind_handler.hpp:183:9: error: call to deleted constructor of 'std::unique_ptr<int>'
183 | static_cast<const Arg2&>(arg2_));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/cbodley/asio/include/boost/asio/detail/handler_work.hpp:470:7: note: in instantiation of member function 'boost::asio::detail::binder2<(lambda at main.cc:12:10), std::__exception_ptr::exception_ptr, std::unique_ptr<int>>::operator()' requested here
470 | static_cast<Function&&>(function)();
| ^
/home/cbodley/asio/include/boost/asio/impl/spawn.hpp:912:13: note: in instantiation of function template specialization 'boost::asio::detail::handler_work<(lambda at main.cc:12:10), boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>>::complete<boost::asio::detail::binder2<(lambda at main.cc:12:10), std::__exception_ptr::exception_ptr, std::unique_ptr<int>>>' requested here
912 | work_.complete(handler, handler.handler_);
| ^
/home/cbodley/asio/include/boost/asio/impl/spawn.hpp:858:11: note: in instantiation of function template specialization 'boost::asio::detail::spawn_entry_point<boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>, (lambda at main.cc:10:27), (lambda at main.cc:12:10)>::call<std::unique_ptr<int>>' requested here
858 | this->call(yield,
| ^
/home/cbodley/asio/include/boost/asio/impl/spawn.hpp:282:9: note: in instantiation of member function 'boost::asio::detail::spawn_entry_point<boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>, (lambda at main.cc:10:27), (lambda at main.cc:12:10)>::operator()' requested here
282 | function(&spawned_thread);
| ^
/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/invoke.h:61:14: note: in instantiation of member function 'boost::asio::detail::spawned_fiber_thread::entry_point<boost::asio::detail::spawn_entry_point<boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>, (lambda at main.cc:10:27), (lambda at main.cc:12:10)>>::operator()' requested here
61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); }
| ^
/usr/include/boost/context/fiber_fcontext.hpp:97:23: note: (skipping 6 contexts in backtrace; use -ftemplate-backtrace-limit=0 to see all)
97 | t.fctx = rec->run( t.fctx);
| ^
/home/cbodley/asio/include/boost/asio/async_result.hpp:329:5: note: in instantiation of function template specialization 'boost::asio::detail::initiate_spawn<boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>>::operator()<(lambda at main.cc:12:10), (lambda at main.cc:10:27)>' requested here
329 | static_cast<Initiation&&>(initiation)(
| ^
/home/cbodley/asio/include/boost/asio/async_result.hpp:629:65: note: in instantiation of function template specialization 'boost::asio::detail::completion_handler_async_result<(lambda at main.cc:12:10), void (std::__exception_ptr::exception_ptr, std::unique_ptr<int>)>::initiate<boost::asio::detail::initiate_spawn<boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>>, (lambda at main.cc:12:10), (lambda at main.cc:10:27)>' requested here
629 | return async_result<decay_t<CompletionToken>, Signatures...>::initiate(
| ^
/home/cbodley/asio/include/boost/asio/impl/spawn.hpp:1123:10: note: in instantiation of function template specialization 'boost::asio::async_initiate<(lambda at main.cc:12:10), void (std::__exception_ptr::exception_ptr, std::unique_ptr<int>), boost::asio::detail::initiate_spawn<boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>>, (lambda at main.cc:10:27)>' requested here
1123 | return async_initiate<CompletionToken,
| ^
/home/cbodley/asio/include/boost/asio/impl/spawn.hpp:1155:11: note: in instantiation of function template specialization 'boost::asio::spawn<boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>, (lambda at main.cc:10:27), (lambda at main.cc:12:10)>' requested here
1155 | return (spawn)(ctx.get_executor(), static_cast<F&&>(function),
| ^
main.cc:10:16: note: in instantiation of function template specialization 'boost::asio::spawn<boost::asio::io_context, (lambda at main.cc:10:27), (lambda at main.cc:12:10)>' requested here
10 | boost::asio::spawn(ctx, [] (boost::asio::yield_context yield) {
| ^
/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unique_ptr.h:516:7: note: 'unique_ptr' has been explicitly marked deleted here
516 | unique_ptr(const unique_ptr&) = delete;
| ^
main.cc:12:60: note: passing argument to parameter 'result' here
12 | }, [] (std::exception_ptr eptr, std::unique_ptr<int> result) {
| ^
In file included from main.cc:4:
In file included from /home/cbodley/asio/include/boost/asio.hpp:31:
In file included from /home/cbodley/asio/include/boost/asio/awaitable.hpp:140:
In file included from /home/cbodley/asio/include/boost/asio/impl/awaitable.hpp:29:
In file included from /home/cbodley/asio/include/boost/asio/post.hpp:20:
In file included from /home/cbodley/asio/include/boost/asio/detail/initiate_post.hpp:21:
In file included from /home/cbodley/asio/include/boost/asio/detail/work_dispatcher.hpp:19:
/home/cbodley/asio/include/boost/asio/detail/bind_handler.hpp:188:21: error: call to deleted constructor of 'std::unique_ptr<int>'
188 | handler_(arg1_, arg2_);
| ^~~~~
/home/cbodley/asio/include/boost/asio/detail/handler_work.hpp:204:5: note: in instantiation of member function 'boost::asio::detail::binder2<(lambda at main.cc:12:10), std::__exception_ptr::exception_ptr, std::unique_ptr<int>>::operator()' requested here
204 | static_cast<Function&&>(function)();
| ^
/home/cbodley/asio/include/boost/asio/detail/handler_work.hpp:474:19: note: in instantiation of function template specialization 'boost::asio::detail::handler_work_base<boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>>::dispatch<boost::asio::detail::binder2<(lambda at main.cc:12:10), std::__exception_ptr::exception_ptr, std::unique_ptr<int>>, (lambda at main.cc:12:10)>' requested here
474 | base1_type::dispatch(function, handler);
| ^
/home/cbodley/asio/include/boost/asio/impl/spawn.hpp:912:13: note: in instantiation of function template specialization 'boost::asio::detail::handler_work<(lambda at main.cc:12:10), boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>>::complete<boost::asio::detail::binder2<(lambda at main.cc:12:10), std::__exception_ptr::exception_ptr, std::unique_ptr<int>>>' requested here
912 | work_.complete(handler, handler.handler_);
| ^
/home/cbodley/asio/include/boost/asio/impl/spawn.hpp:858:11: note: in instantiation of function template specialization 'boost::asio::detail::spawn_entry_point<boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>, (lambda at main.cc:10:27), (lambda at main.cc:12:10)>::call<std::unique_ptr<int>>' requested here
858 | this->call(yield,
| ^
/home/cbodley/asio/include/boost/asio/impl/spawn.hpp:282:9: note: in instantiation of member function 'boost::asio::detail::spawn_entry_point<boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>, (lambda at main.cc:10:27), (lambda at main.cc:12:10)>::operator()' requested here
282 | function(&spawned_thread);
| ^
/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/invoke.h:61:14: note: (skipping 7 contexts in backtrace; use -ftemplate-backtrace-limit=0 to see all)
61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); }
| ^
/home/cbodley/asio/include/boost/asio/async_result.hpp:329:5: note: in instantiation of function template specialization 'boost::asio::detail::initiate_spawn<boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>>::operator()<(lambda at main.cc:12:10), (lambda at main.cc:10:27)>' requested here
329 | static_cast<Initiation&&>(initiation)(
| ^
/home/cbodley/asio/include/boost/asio/async_result.hpp:629:65: note: in instantiation of function template specialization 'boost::asio::detail::completion_handler_async_result<(lambda at main.cc:12:10), void (std::__exception_ptr::exception_ptr, std::unique_ptr<int>)>::initiate<boost::asio::detail::initiate_spawn<boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>>, (lambda at main.cc:12:10), (lambda at main.cc:10:27)>' requested here
629 | return async_result<decay_t<CompletionToken>, Signatures...>::initiate(
| ^
/home/cbodley/asio/include/boost/asio/impl/spawn.hpp:1123:10: note: in instantiation of function template specialization 'boost::asio::async_initiate<(lambda at main.cc:12:10), void (std::__exception_ptr::exception_ptr, std::unique_ptr<int>), boost::asio::detail::initiate_spawn<boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>>, (lambda at main.cc:10:27)>' requested here
1123 | return async_initiate<CompletionToken,
| ^
/home/cbodley/asio/include/boost/asio/impl/spawn.hpp:1155:11: note: in instantiation of function template specialization 'boost::asio::spawn<boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>, (lambda at main.cc:10:27), (lambda at main.cc:12:10)>' requested here
1155 | return (spawn)(ctx.get_executor(), static_cast<F&&>(function),
| ^
main.cc:10:16: note: in instantiation of function template specialization 'boost::asio::spawn<boost::asio::io_context, (lambda at main.cc:10:27), (lambda at main.cc:12:10)>' requested here
10 | boost::asio::spawn(ctx, [] (boost::asio::yield_context yield) {
| ^
/usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/bits/unique_ptr.h:516:7: note: 'unique_ptr' has been explicitly marked deleted here
516 | unique_ptr(const unique_ptr&) = delete;
| ^
main.cc:12:60: note: passing argument to parameter 'result' here
12 | }, [] (std::exception_ptr eptr, std::unique_ptr<int> result) {
| ^
3 errors generated.
In file included from /home/cbodley/asio/include/boost/asio/detail/work_dispatcher.hpp:19,
from /home/cbodley/asio/include/boost/asio/detail/initiate_post.hpp:21,
from /home/cbodley/asio/include/boost/asio/post.hpp:20,
from /home/cbodley/asio/include/boost/asio/impl/awaitable.hpp:29,
from /home/cbodley/asio/include/boost/asio/awaitable.hpp:140,
from /home/cbodley/asio/include/boost/asio.hpp:31,
from main.cc:4:
/home/cbodley/asio/include/boost/asio/detail/bind_handler.hpp: In instantiation of ‘boost::asio::detail::binder2<Handler, Arg1, Arg2>::binder2(Handler&, const Arg1&, const Arg2&) [with Handler = main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>; Arg1 = std::__exception_ptr::exception_ptr; Arg2 = std::unique_ptr<int, std::default_delete<int> >]’:
/home/cbodley/asio/include/boost/asio/impl/spawn.hpp:911:9: required from ‘void boost::asio::detail::spawn_entry_point<Executor, Function, Handler>::call(const boost::asio::basic_yield_context<Executor>&, boost::asio::void_type<T>) [with T = std::unique_ptr<int, std::default_delete<int> >; Executor = boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>; Function = main()::<lambda(boost::asio::yield_context)>; Handler = main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>]’
911 | handler(handler_, exception_ptr(), static_cast<T&&>(result));
| ^~~~~~~
/home/cbodley/asio/include/boost/asio/impl/spawn.hpp:858:15: required from ‘void boost::asio::detail::spawn_entry_point<Executor, Function, Handler>::operator()(boost::asio::detail::spawned_thread_base*) [with Executor = boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>; Function = main()::<lambda(boost::asio::yield_context)>; Handler = main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>]’
858 | this->call(yield,
| ~~~~~~~~~~^~~~~~~
859 | void_type<result_of_t<Function(basic_yield_context<Executor>)>>());
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/cbodley/asio/include/boost/asio/impl/spawn.hpp:282:17: required from ‘boost::asio::detail::spawned_fiber_thread::fiber_type boost::asio::detail::spawned_fiber_thread::entry_point<Function>::operator()(boost::asio::detail::spawned_fiber_thread::fiber_type&&) [with Function = boost::asio::detail::spawn_entry_point<boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>, main()::<lambda(boost::asio::yield_context)>, main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)> >; boost::asio::detail::spawned_fiber_thread::fiber_type = boost::context::fiber]’
282 | function(&spawned_thread);
| ~~~~~~~~^~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = boost::context::fiber; _Fn = boost::asio::detail::spawned_fiber_thread::entry_point<boost::asio::detail::spawn_entry_point<boost::asio::io_context::basic_executor_type<allocator<void>, 0>, main()::<lambda(boost::asio::yield_context)>, main()::<lambda(__exception_ptr::exception_ptr, unique_ptr<int, default_delete<int> >)> > >&; _Args = {boost::context::fiber}]’
61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); }
| ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/invoke.h:96:40: required from ‘constexpr typename std::__invoke_result<_Functor, _ArgTypes>::type std::__invoke(_Callable&&, _Args&& ...) [with _Callable = boost::asio::detail::spawned_fiber_thread::entry_point<boost::asio::detail::spawn_entry_point<boost::asio::io_context::basic_executor_type<allocator<void>, 0>, main()::<lambda(boost::asio::yield_context)>, main()::<lambda(__exception_ptr::exception_ptr, unique_ptr<int, default_delete<int> >)> > >&; _Args = {boost::context::fiber}; typename __invoke_result<_Functor, _ArgTypes>::type = boost::context::fiber]’
96 | return std::__invoke_impl<__type>(__tag{}, std::forward<_Callable>(__fn),
| ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
97 | std::forward<_Args>(__args)...);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/functional:120:27: [ skipping 7 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/home/cbodley/asio/include/boost/asio/impl/spawn.hpp:1050:45: required from ‘void boost::asio::detail::initiate_spawn<Executor>::operator()(Handler&&, F&&) const [with Handler = main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>; F = main()::<lambda(boost::asio::yield_context)>; Executor = boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>]’
1050 | default_spawned_thread_type::spawn(
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
1051 | spawn_entry_point<Executor, function_type, handler_type>(
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1052 | executor_, static_cast<F&&>(f),
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1053 | static_cast<Handler&&>(handler)),
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1054 | proxy_slot, cancel_state)));
| ~~~~~~~~~~~~~~~~~~~~~~~~~
/home/cbodley/asio/include/boost/asio/async_result.hpp:329:42: required from ‘static boost::asio::detail::completion_handler_async_result<CompletionToken, Signatures>::return_type boost::asio::detail::completion_handler_async_result<CompletionToken, Signatures>::initiate(Initiation&&, RawCompletionToken&&, Args&& ...) [with Initiation = boost::asio::detail::initiate_spawn<boost::asio::io_context::basic_executor_type<std::allocator<void>, 0> >; RawCompletionToken = main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>; Args = {main()::<lambda(boost::asio::yield_context)>}; CompletionToken = main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>; Signatures = {void(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)}; return_type = void]’
329 | static_cast<Initiation&&>(initiation)(
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
330 | static_cast<RawCompletionToken&&>(token),
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
331 | static_cast<Args&&>(args)...);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/cbodley/asio/include/boost/asio/async_result.hpp:629:73: required from ‘decltype (boost::asio::enable_if_t<((bool)typename std::enable_if<boost::asio::detail::are_completion_signatures<TN ...>::value, boost::asio::detail::async_result_has_initiate_memfn<CompletionToken, Signatures ...> >::type::value), boost::asio::async_result<typename std::decay<_Tp>::type, Signatures ...> >::initiate(static_cast<Initiation&&>(initiation), static_cast<CompletionToken&&>(token), static_cast<Args&&>(boost::asio::async_initiate::args) ...)) boost::asio::async_initiate(Initiation&&, type_identity_t<CompletionToken>&, Args&& ...) [with CompletionToken = main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>; Signatures = {void(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)}; Initiation = detail::initiate_spawn<io_context::basic_executor_type<std::allocator<void>, 0> >; Args = {main()::<lambda(yield_context)>}; decltype (enable_if_t<((bool)typename std::enable_if<detail::are_completion_signatures<TN ...>::value, detail::async_result_has_initiate_memfn<CompletionToken, Signatures ...> >::type::value), async_result<typename std::decay<_Tp>::type, Signatures ...> >::initiate(static_cast<Initiation&&>(initiation), static_cast<CompletionToken&&>(token), static_cast<Args&&>(boost::asio::async_initiate::args) ...)) = void; enable_if_t<((bool)typename std::enable_if<detail::are_completion_signatures<TN ...>::value, detail::async_result_has_initiate_memfn<CompletionToken, Signatures ...> >::type::value), async_result<typename std::decay<_Tp>::type, Signatures ...> > = async_result<main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>, void(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>; typename std::enable_if<detail::are_completion_signatures<TN ...>::value, detail::async_result_has_initiate_memfn<CompletionToken, Signatures ...> >::type = detail::async_result_has_initiate_memfn<main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>, void(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>; typename std::decay<_Tp>::type = main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>; type_identity_t<CompletionToken> = main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>]’
629 | return async_result<decay_t<CompletionToken>, Signatures...>::initiate(
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
630 | static_cast<Initiation&&>(initiation),
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
631 | static_cast<CompletionToken&&>(token),
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
632 | static_cast<Args&&>(args)...);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/cbodley/asio/include/boost/asio/impl/spawn.hpp:1125:60: required from ‘decltype (async_initiate<CompletionToken, typename boost::asio::detail::spawn_signature<typename boost::asio::result_of<F(boost::asio::basic_yield_context<Executor>)>::type>::type>(declval<boost::asio::detail::initiate_spawn<Executor> >(), token, static_cast<F&&>(function))) boost::asio::spawn(const Executor&, F&&, CompletionToken&&, constraint_t<((bool)(! std::is_same<typename std::decay<Property>::type, boost::coroutines::attributes>::value))>, constraint_t<((bool)(is_executor<Executor>::value || execution::is_executor<T>::value))>) [with Executor = io_context::basic_executor_type<std::allocator<void>, 0>; F = main()::<lambda(yield_context)>; CompletionToken = main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>; decltype (async_initiate<CompletionToken, typename detail::spawn_signature<typename result_of<F(basic_yield_context<Executor>)>::type>::type>(declval<detail::initiate_spawn<Executor> >(), token, static_cast<F&&>(function))) = void; typename detail::spawn_signature<typename result_of<F(basic_yield_context<Executor>)>::type>::type = void(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >); typename result_of<F(basic_yield_context<Executor>)>::type = std::unique_ptr<int, std::default_delete<int> >; constraint_t<((bool)(! std::is_same<typename std::decay<Property>::type, boost::coroutines::attributes>::value))> = int; typename std::decay<Property>::type = main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>; constraint_t<((bool)(is_executor<Executor>::value || execution::is_executor<T>::value))> = int]’
1123 | return async_initiate<CompletionToken,
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1124 | typename detail::spawn_signature<
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1125 | result_of_t<F(basic_yield_context<Executor>)>>::type>(
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
1126 | detail::initiate_spawn<Executor>(ex),
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1127 | token, static_cast<F&&>(function));
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/cbodley/asio/include/boost/asio/impl/spawn.hpp:1155:17: required from ‘decltype (async_initiate<CompletionToken, typename boost::asio::detail::spawn_signature<typename boost::asio::result_of<F(boost::asio::basic_yield_context<typename ExecutionContext::executor_type>)>::type>::type>(declval<boost::asio::detail::initiate_spawn<typename ExecutionContext::executor_type> >(), token, static_cast<F&&>(function))) boost::asio::spawn(ExecutionContext&, F&&, CompletionToken&&, constraint_t<((bool)(! std::is_same<typename std::decay<Property>::type, boost::coroutines::attributes>::value))>, constraint_t<((bool)std::is_convertible<ExecutionContext&, execution_context&>::value)>) [with ExecutionContext = io_context; F = main()::<lambda(yield_context)>; CompletionToken = main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>; decltype (async_initiate<CompletionToken, typename detail::spawn_signature<typename result_of<F(basic_yield_context<typename ExecutionContext::executor_type>)>::type>::type>(declval<detail::initiate_spawn<typename ExecutionContext::executor_type> >(), token, static_cast<F&&>(function))) = void; typename detail::spawn_signature<typename result_of<F(basic_yield_context<typename ExecutionContext::executor_type>)>::type>::type = void(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >); typename result_of<F(basic_yield_context<typename ExecutionContext::executor_type>)>::type = std::unique_ptr<int, std::default_delete<int> >; typename ExecutionContext::executor_type = io_context::basic_executor_type<std::allocator<void>, 0>; constraint_t<((bool)(! std::is_same<typename std::decay<Property>::type, boost::coroutines::attributes>::value))> = int; typename std::decay<Property>::type = main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>; constraint_t<((bool)std::is_convertible<ExecutionContext&, execution_context&>::value)> = int]’
1155 | return (spawn)(ctx.get_executor(), static_cast<F&&>(function),
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1156 | static_cast<CompletionToken&&>(token));
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
main.cc:10:21: required from here
10 | boost::asio::spawn(ctx, [] (boost::asio::yield_context yield) {
| ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
11 | return std::make_unique<int>(42);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
12 | }, [] (std::exception_ptr eptr, std::unique_ptr<int> result) {
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
13 | if (eptr) {
| ~~~~~~~~~~~
14 | std::rethrow_exception(eptr);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
15 | } else {
| ~~~~~~~~
16 | std::cout << *result << '\n';
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
17 | }
| ~
18 | });
| ~~
/home/cbodley/asio/include/boost/asio/detail/bind_handler.hpp:161:7: error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = int; _Dp = std::default_delete<int>]’
161 | arg2_(arg2)
| ^~~~~~~~~~~
In file included from /usr/include/c++/14/memory:78,
from main.cc:3:
/usr/include/c++/14/bits/unique_ptr.h:516:7: note: declared here
516 | unique_ptr(const unique_ptr&) = delete;
| ^~~~~~~~~~
/home/cbodley/asio/include/boost/asio/detail/bind_handler.hpp:161:7: note: use ‘-fdiagnostics-all-candidates’ to display considered candidates
161 | arg2_(arg2)
| ^~~~~~~~~~~
/home/cbodley/asio/include/boost/asio/detail/bind_handler.hpp: In instantiation of ‘void boost::asio::detail::binder2<Handler, Arg1, Arg2>::operator()() [with Handler = main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>; Arg1 = std::__exception_ptr::exception_ptr; Arg2 = std::unique_ptr<int, std::default_delete<int> >]’:
/home/cbodley/asio/include/boost/asio/detail/handler_work.hpp:470:40: required from ‘void boost::asio::detail::handler_work<Handler, IoExecutor, typename std::enable_if<std::is_same<typename boost::asio::associated_executor<T, Executor>::asio_associated_executor_is_unspecialised, void>::value, void>::type>::complete(Function&, Handler&) [with Function = boost::asio::detail::binder2<main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>, std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> > >; Handler = main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>; IoExecutor = boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>; typename std::enable_if<std::is_same<typename boost::asio::associated_executor<T, Executor>::asio_associated_executor_is_unspecialised, void>::value, void>::type = void; typename boost::asio::associated_executor<T, Executor>::asio_associated_executor_is_unspecialised = void]’
470 | static_cast<Function&&>(function)();
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
/home/cbodley/asio/include/boost/asio/impl/spawn.hpp:912:21: required from ‘void boost::asio::detail::spawn_entry_point<Executor, Function, Handler>::call(const boost::asio::basic_yield_context<Executor>&, boost::asio::void_type<T>) [with T = std::unique_ptr<int, std::default_delete<int> >; Executor = boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>; Function = main()::<lambda(boost::asio::yield_context)>; Handler = main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>]’
912 | work_.complete(handler, handler.handler_);
| ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/cbodley/asio/include/boost/asio/impl/spawn.hpp:858:15: required from ‘void boost::asio::detail::spawn_entry_point<Executor, Function, Handler>::operator()(boost::asio::detail::spawned_thread_base*) [with Executor = boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>; Function = main()::<lambda(boost::asio::yield_context)>; Handler = main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>]’
858 | this->call(yield,
| ~~~~~~~~~~^~~~~~~
859 | void_type<result_of_t<Function(basic_yield_context<Executor>)>>());
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/cbodley/asio/include/boost/asio/impl/spawn.hpp:282:17: required from ‘boost::asio::detail::spawned_fiber_thread::fiber_type boost::asio::detail::spawned_fiber_thread::entry_point<Function>::operator()(boost::asio::detail::spawned_fiber_thread::fiber_type&&) [with Function = boost::asio::detail::spawn_entry_point<boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>, main()::<lambda(boost::asio::yield_context)>, main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)> >; boost::asio::detail::spawned_fiber_thread::fiber_type = boost::context::fiber]’
282 | function(&spawned_thread);
| ~~~~~~~~^~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = boost::context::fiber; _Fn = boost::asio::detail::spawned_fiber_thread::entry_point<boost::asio::detail::spawn_entry_point<boost::asio::io_context::basic_executor_type<allocator<void>, 0>, main()::<lambda(boost::asio::yield_context)>, main()::<lambda(__exception_ptr::exception_ptr, unique_ptr<int, default_delete<int> >)> > >&; _Args = {boost::context::fiber}]’
61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); }
| ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/invoke.h:96:40: [ skipping 8 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/home/cbodley/asio/include/boost/asio/impl/spawn.hpp:1050:45: required from ‘void boost::asio::detail::initiate_spawn<Executor>::operator()(Handler&&, F&&) const [with Handler = main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>; F = main()::<lambda(boost::asio::yield_context)>; Executor = boost::asio::io_context::basic_executor_type<std::allocator<void>, 0>]’
1050 | default_spawned_thread_type::spawn(
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
1051 | spawn_entry_point<Executor, function_type, handler_type>(
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1052 | executor_, static_cast<F&&>(f),
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1053 | static_cast<Handler&&>(handler)),
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1054 | proxy_slot, cancel_state)));
| ~~~~~~~~~~~~~~~~~~~~~~~~~
/home/cbodley/asio/include/boost/asio/async_result.hpp:329:42: required from ‘static boost::asio::detail::completion_handler_async_result<CompletionToken, Signatures>::return_type boost::asio::detail::completion_handler_async_result<CompletionToken, Signatures>::initiate(Initiation&&, RawCompletionToken&&, Args&& ...) [with Initiation = boost::asio::detail::initiate_spawn<boost::asio::io_context::basic_executor_type<std::allocator<void>, 0> >; RawCompletionToken = main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>; Args = {main()::<lambda(boost::asio::yield_context)>}; CompletionToken = main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>; Signatures = {void(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)}; return_type = void]’
329 | static_cast<Initiation&&>(initiation)(
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
330 | static_cast<RawCompletionToken&&>(token),
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
331 | static_cast<Args&&>(args)...);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/cbodley/asio/include/boost/asio/async_result.hpp:629:73: required from ‘decltype (boost::asio::enable_if_t<((bool)typename std::enable_if<boost::asio::detail::are_completion_signatures<TN ...>::value, boost::asio::detail::async_result_has_initiate_memfn<CompletionToken, Signatures ...> >::type::value), boost::asio::async_result<typename std::decay<_Tp>::type, Signatures ...> >::initiate(static_cast<Initiation&&>(initiation), static_cast<CompletionToken&&>(token), static_cast<Args&&>(boost::asio::async_initiate::args) ...)) boost::asio::async_initiate(Initiation&&, type_identity_t<CompletionToken>&, Args&& ...) [with CompletionToken = main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>; Signatures = {void(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)}; Initiation = detail::initiate_spawn<io_context::basic_executor_type<std::allocator<void>, 0> >; Args = {main()::<lambda(yield_context)>}; decltype (enable_if_t<((bool)typename std::enable_if<detail::are_completion_signatures<TN ...>::value, detail::async_result_has_initiate_memfn<CompletionToken, Signatures ...> >::type::value), async_result<typename std::decay<_Tp>::type, Signatures ...> >::initiate(static_cast<Initiation&&>(initiation), static_cast<CompletionToken&&>(token), static_cast<Args&&>(boost::asio::async_initiate::args) ...)) = void; enable_if_t<((bool)typename std::enable_if<detail::are_completion_signatures<TN ...>::value, detail::async_result_has_initiate_memfn<CompletionToken, Signatures ...> >::type::value), async_result<typename std::decay<_Tp>::type, Signatures ...> > = async_result<main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>, void(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>; typename std::enable_if<detail::are_completion_signatures<TN ...>::value, detail::async_result_has_initiate_memfn<CompletionToken, Signatures ...> >::type = detail::async_result_has_initiate_memfn<main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>, void(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>; typename std::decay<_Tp>::type = main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>; type_identity_t<CompletionToken> = main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>]’
629 | return async_result<decay_t<CompletionToken>, Signatures...>::initiate(
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
630 | static_cast<Initiation&&>(initiation),
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
631 | static_cast<CompletionToken&&>(token),
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
632 | static_cast<Args&&>(args)...);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/cbodley/asio/include/boost/asio/impl/spawn.hpp:1125:60: required from ‘decltype (async_initiate<CompletionToken, typename boost::asio::detail::spawn_signature<typename boost::asio::result_of<F(boost::asio::basic_yield_context<Executor>)>::type>::type>(declval<boost::asio::detail::initiate_spawn<Executor> >(), token, static_cast<F&&>(function))) boost::asio::spawn(const Executor&, F&&, CompletionToken&&, constraint_t<((bool)(! std::is_same<typename std::decay<Property>::type, boost::coroutines::attributes>::value))>, constraint_t<((bool)(is_executor<Executor>::value || execution::is_executor<T>::value))>) [with Executor = io_context::basic_executor_type<std::allocator<void>, 0>; F = main()::<lambda(yield_context)>; CompletionToken = main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>; decltype (async_initiate<CompletionToken, typename detail::spawn_signature<typename result_of<F(basic_yield_context<Executor>)>::type>::type>(declval<detail::initiate_spawn<Executor> >(), token, static_cast<F&&>(function))) = void; typename detail::spawn_signature<typename result_of<F(basic_yield_context<Executor>)>::type>::type = void(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >); typename result_of<F(basic_yield_context<Executor>)>::type = std::unique_ptr<int, std::default_delete<int> >; constraint_t<((bool)(! std::is_same<typename std::decay<Property>::type, boost::coroutines::attributes>::value))> = int; typename std::decay<Property>::type = main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>; constraint_t<((bool)(is_executor<Executor>::value || execution::is_executor<T>::value))> = int]’
1123 | return async_initiate<CompletionToken,
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1124 | typename detail::spawn_signature<
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1125 | result_of_t<F(basic_yield_context<Executor>)>>::type>(
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
1126 | detail::initiate_spawn<Executor>(ex),
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1127 | token, static_cast<F&&>(function));
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/cbodley/asio/include/boost/asio/impl/spawn.hpp:1155:17: required from ‘decltype (async_initiate<CompletionToken, typename boost::asio::detail::spawn_signature<typename boost::asio::result_of<F(boost::asio::basic_yield_context<typename ExecutionContext::executor_type>)>::type>::type>(declval<boost::asio::detail::initiate_spawn<typename ExecutionContext::executor_type> >(), token, static_cast<F&&>(function))) boost::asio::spawn(ExecutionContext&, F&&, CompletionToken&&, constraint_t<((bool)(! std::is_same<typename std::decay<Property>::type, boost::coroutines::attributes>::value))>, constraint_t<((bool)std::is_convertible<ExecutionContext&, execution_context&>::value)>) [with ExecutionContext = io_context; F = main()::<lambda(yield_context)>; CompletionToken = main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>; decltype (async_initiate<CompletionToken, typename detail::spawn_signature<typename result_of<F(basic_yield_context<typename ExecutionContext::executor_type>)>::type>::type>(declval<detail::initiate_spawn<typename ExecutionContext::executor_type> >(), token, static_cast<F&&>(function))) = void; typename detail::spawn_signature<typename result_of<F(basic_yield_context<typename ExecutionContext::executor_type>)>::type>::type = void(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >); typename result_of<F(basic_yield_context<typename ExecutionContext::executor_type>)>::type = std::unique_ptr<int, std::default_delete<int> >; typename ExecutionContext::executor_type = io_context::basic_executor_type<std::allocator<void>, 0>; constraint_t<((bool)(! std::is_same<typename std::decay<Property>::type, boost::coroutines::attributes>::value))> = int; typename std::decay<Property>::type = main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>; constraint_t<((bool)std::is_convertible<ExecutionContext&, execution_context&>::value)> = int]’
1155 | return (spawn)(ctx.get_executor(), static_cast<F&&>(function),
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1156 | static_cast<CompletionToken&&>(token));
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
main.cc:10:21: required from here
10 | boost::asio::spawn(ctx, [] (boost::asio::yield_context yield) {
| ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
11 | return std::make_unique<int>(42);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
12 | }, [] (std::exception_ptr eptr, std::unique_ptr<int> result) {
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
13 | if (eptr) {
| ~~~~~~~~~~~
14 | std::rethrow_exception(eptr);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
15 | } else {
| ~~~~~~~~
16 | std::cout << *result << '\n';
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
17 | }
| ~
18 | });
| ~~
/home/cbodley/asio/include/boost/asio/detail/bind_handler.hpp:181:37: error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = int; _Dp = std::default_delete<int>]’
181 | static_cast<Handler&&>(handler_)(
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
182 | static_cast<const Arg1&>(arg1_),
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
183 | static_cast<const Arg2&>(arg2_));
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/unique_ptr.h:516:7: note: declared here
516 | unique_ptr(const unique_ptr&) = delete;
| ^~~~~~~~~~
/home/cbodley/asio/include/boost/asio/detail/bind_handler.hpp:181:37: note: use ‘-fdiagnostics-all-candidates’ to display considered candidates
181 | static_cast<Handler&&>(handler_)(
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
182 | static_cast<const Arg1&>(arg1_),
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
183 | static_cast<const Arg2&>(arg2_));
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
main.cc:12:10: note: initializing argument 2 of ‘main()::<lambda(std::__exception_ptr::exception_ptr, std::unique_ptr<int, std::default_delete<int> >)>’
12 | }, [] (std::exception_ptr eptr, std::unique_ptr<int> result) {
| ^
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment