Naios / continuable

C++14 asynchronous allocation aware futures (supporting then, exception handling, coroutines and connections)
https://naios.github.io/continuable/
MIT License
815 stars 44 forks source link

cti::transforms::wait_for doesn't compile with cmake options -DCTI_CONTINUABLE_WITH_COROUTINE=ON -DCTI_CONTINUABLE_WITH_CPP_LATEST=ON #66

Open KasperDeSmedt opened 1 year ago

KasperDeSmedt commented 1 year ago

@Naios

.apply(cti::transforms::wait_for(time)) doesn't seem to compile if cmake options CTI_CONTINUABLE_WITH_COROUTINE and CTI_CONTINUABLE_WITH_CPP_LATEST are enabled. I can reproduce this by building this project's tests with the options enabled.


Commit Hash

f7f304e971e05d5cae24edc6a0c93116588edd0b

Steps to Reproduce

Execute the following commands in the continuable project dirctory.

  1. cmake -DCTI_CONTINUABLE_WITH_COROUTINE=ON -DCTI_CONTINUABLE_WITH_CPP_LATEST=ON .
  2. make

Prints the following error:

In file included from /home/kasper/Documents/continuable/include/continuable/transforms/wait.hpp:38,
                 from /home/kasper/Documents/continuable/include/continuable/continuable-transforms.hpp:34,
                 from /home/kasper/Documents/continuable/test/unit-test/async/test-continuable-async.cpp:27:
/home/kasper/Documents/continuable/include/continuable/detail/transforms/wait.hpp: In instantiation of ‘Result cti::detail::transforms::wait_unsafe(cti::continuable_base<Data, Annotation>&&, Waiter&&) [with Data = cti::detail::base::proxy_continuable<cti::detail::identity<>, asio::async_result<cti::use_continuable_t<>, void(std::error_code)>::initiate<asio::basic_waitable_timer<std::chrono::_V2::steady_clock>::initiate_async_wait>(asio::basic_waitable_timer<std::chrono::_V2::steady_clock>::initiate_async_wait, cti::use_continuable_t<>)::<lambda(auto:75&&)> >; Annotation = cti::detail::identity<>; Waiter = cti::transforms::wait_for<long int, std::ratio<1, 1000> >(std::chrono::duration<long int, std::ratio<1, 1000> >)::<lambda(auto:46&&)>::<lambda(cti::detail::transforms::condition_variable_t&, cti::detail::transforms::lock_t&, auto:47&&)>; Result = cti::result<>]’:
/home/kasper/Documents/continuable/include/continuable/transforms/wait.hpp:99:43:   required from ‘cti::transforms::wait_for<long int, std::ratio<1, 1000> >(std::chrono::duration<long int, std::ratio<1, 1000> >)::<lambda(auto:46&&)> [with auto:46 = cti::continuable_base<cti::detail::base::proxy_continuable<cti::detail::identity<>, asio::async_result<cti::use_continuable_t<>, void(std::error_code)>::initiate<asio::basic_waitable_timer<std::chrono::_V2::steady_clock>::initiate_async_wait>(asio::basic_waitable_timer<std::chrono::_V2::steady_clock>::initiate_async_wait, cti::use_continuable_t<>)::<lambda(auto:75&&)> >, cti::detail::identity<> >]’
/home/kasper/Documents/continuable/include/continuable/continuable-base.hpp:480:38:   required from ‘auto cti::continuable_base<Data, Annotation>::apply(T&&) && [with T = cti::transforms::wait_for<long int, std::ratio<1, 1000> >(std::chrono::duration<long int, std::ratio<1, 1000> >)::<lambda(auto:46&&)>; Data = cti::detail::base::proxy_continuable<cti::detail::identity<>, asio::async_result<cti::use_continuable_t<>, void(std::error_code)>::initiate<asio::basic_waitable_timer<std::chrono::_V2::steady_clock>::initiate_async_wait>(asio::basic_waitable_timer<std::chrono::_V2::steady_clock>::initiate_async_wait, cti::use_continuable_t<>)::<lambda(auto:75&&)> >; Annotation = cti::detail::identity<>]’
/home/kasper/Documents/continuable/test/unit-test/async/test-continuable-async.cpp:183:46:   required from here
/home/kasper/Documents/continuable/include/continuable/detail/transforms/wait.hpp:241:12: error: no matching function for call to ‘cti::detail::transforms::unlocker<cti::result<> >::unlocker(<brace-enclosed initializer list>)’
  240 |   std::move(continuable)
      |   ~~~~~~~~~~~~~~~~~~~~~~
  241 |       .next(unlocker<Result>{std::weak_ptr<frame_t>(frame)})
      |       ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/kasper/Documents/continuable/include/continuable/detail/transforms/wait.hpp:191:3: note: candidate: ‘cti::detail::transforms::unlocker<Result>::unlocker(cti::detail::transforms::unlocker<Result>&&) [with Result = cti::result<>]’
  191 |   unlocker(unlocker&&) = default;
      |   ^~~~~~~~
/home/kasper/Documents/continuable/include/continuable/detail/transforms/wait.hpp:191:12: note:   no known conversion for argument 1 from ‘std::weak_ptr<cti::detail::transforms::wait_frame<cti::result<> > >’ to ‘cti::detail::transforms::unlocker<cti::result<> >&&’
  191 |   unlocker(unlocker&&) = default;
      |            ^~~~~~~~~~
/home/kasper/Documents/continuable/include/continuable/detail/transforms/wait.hpp: In instantiation of ‘Result cti::detail::transforms::wait_unsafe(cti::continuable_base<Data, Annotation>&&, Waiter&&) [with Data = cti::detail::base::proxy_continuable<cti::detail::identity<>, supplier_of<>()::<lambda(auto:94&&)> >; Annotation = cti::detail::identity<>; Waiter = cti::transforms::wait_for<long int, std::ratio<1, 1000> >(std::chrono::duration<long int, std::ratio<1, 1000> >)::<lambda(auto:46&&)>::<lambda(cti::detail::transforms::condition_variable_t&, cti::detail::transforms::lock_t&, auto:47&&)>; Result = cti::result<>]’:
/home/kasper/Documents/continuable/include/continuable/transforms/wait.hpp:99:43:   required from ‘cti::transforms::wait_for<long int, std::ratio<1, 1000> >(std::chrono::duration<long int, std::ratio<1, 1000> >)::<lambda(auto:46&&)> [with auto:46 = cti::continuable_base<cti::detail::base::proxy_continuable<cti::detail::identity<>, supplier_of<>()::<lambda(auto:94&&)> >, cti::detail::identity<> >]’
/home/kasper/Documents/continuable/include/continuable/continuable-base.hpp:480:38:   required from ‘auto cti::continuable_base<Data, Annotation>::apply(T&&) && [with T = cti::transforms::wait_for<long int, std::ratio<1, 1000> >(std::chrono::duration<long int, std::ratio<1, 1000> >)::<lambda(auto:46&&)>; Data = cti::detail::base::proxy_continuable<cti::detail::identity<>, supplier_of<>()::<lambda(auto:94&&)> >; Annotation = cti::detail::identity<>]’
/home/kasper/Documents/continuable/test/unit-test/async/test-continuable-async.cpp:165:23:   required from ‘void single_dimension_tests_wait_for_test_sync_Test<gtest_TypeParam_>::TestBody() [with gtest_TypeParam_ = provide_copyable]’
/home/kasper/Documents/continuable/test/unit-test/async/test-continuable-async.cpp:164:1:   required from here
/home/kasper/Documents/continuable/include/continuable/detail/transforms/wait.hpp:241:12: error: no matching function for call to ‘cti::detail::transforms::unlocker<cti::result<> >::unlocker(<brace-enclosed initializer list>)’
  240 |   std::move(continuable)
      |   ~~~~~~~~~~~~~~~~~~~~~~
  241 |       .next(unlocker<Result>{std::weak_ptr<frame_t>(frame)})
      |       ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/kasper/Documents/continuable/include/continuable/detail/transforms/wait.hpp:191:3: note: candidate: ‘cti::detail::transforms::unlocker<Result>::unlocker(cti::detail::transforms::unlocker<Result>&&) [with Result = cti::result<>]’
  191 |   unlocker(unlocker&&) = default;
      |   ^~~~~~~~
/home/kasper/Documents/continuable/include/continuable/detail/transforms/wait.hpp:191:12: note:   no known conversion for argument 1 from ‘std::weak_ptr<cti::detail::transforms::wait_frame<cti::result<> > >’ to ‘cti::detail::transforms::unlocker<cti::result<> >&&’
  191 |   unlocker(unlocker&&) = default;
      |            ^~~~~~~~~~
/home/kasper/Documents/continuable/include/continuable/detail/transforms/wait.hpp: In instantiation of ‘Result cti::detail::transforms::wait_unsafe(cti::continuable_base<Data, Annotation>&&, Waiter&&) [with Data = cti::detail::base::proxy_continuable<cti::detail::identity<int>, supplier_of<int>(int&&)::<lambda(auto:94&&)> >; Annotation = cti::detail::identity<int>; Waiter = cti::transforms::wait_for<long int, std::ratio<1, 1000> >(std::chrono::duration<long int, std::ratio<1, 1000> >)::<lambda(auto:46&&)>::<lambda(cti::detail::transforms::condition_variable_t&, cti::detail::transforms::lock_t&, auto:47&&)>; Result = cti::result<int>]’:
/home/kasper/Documents/continuable/include/continuable/transforms/wait.hpp:99:43:   required from ‘cti::transforms::wait_for<long int, std::ratio<1, 1000> >(std::chrono::duration<long int, std::ratio<1, 1000> >)::<lambda(auto:46&&)> [with auto:46 = cti::continuable_base<cti::detail::base::proxy_continuable<cti::detail::identity<int>, supplier_of<int>(int&&)::<lambda(auto:94&&)> >, cti::detail::identity<int> >]’
/home/kasper/Documents/continuable/include/continuable/continuable-base.hpp:480:38:   required from ‘auto cti::continuable_base<Data, Annotation>::apply(T&&) && [with T = cti::transforms::wait_for<long int, std::ratio<1, 1000> >(std::chrono::duration<long int, std::ratio<1, 1000> >)::<lambda(auto:46&&)>; Data = cti::detail::base::proxy_continuable<cti::detail::identity<int>, supplier_of<int>(int&&)::<lambda(auto:94&&)> >; Annotation = cti::detail::identity<int>]’
/home/kasper/Documents/continuable/test/unit-test/async/test-continuable-async.cpp:167:3:   required from ‘void single_dimension_tests_wait_for_test_sync_Test<gtest_TypeParam_>::TestBody() [with gtest_TypeParam_ = provide_copyable]’
/home/kasper/Documents/continuable/test/unit-test/async/test-continuable-async.cpp:164:1:   required from here
/home/kasper/Documents/continuable/include/continuable/detail/transforms/wait.hpp:241:12: error: no matching function for call to ‘cti::detail::transforms::unlocker<cti::result<int> >::unlocker(<brace-enclosed initializer list>)’
  240 |   std::move(continuable)
      |   ~~~~~~~~~~~~~~~~~~~~~~
  241 |       .next(unlocker<Result>{std::weak_ptr<frame_t>(frame)})
      |       ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/kasper/Documents/continuable/include/continuable/detail/transforms/wait.hpp:191:3: note: candidate: ‘cti::detail::transforms::unlocker<Result>::unlocker(cti::detail::transforms::unlocker<Result>&&) [with Result = cti::result<int>]’
  191 |   unlocker(unlocker&&) = default;
      |   ^~~~~~~~
/home/kasper/Documents/continuable/include/continuable/detail/transforms/wait.hpp:191:12: note:   no known conversion for argument 1 from ‘std::weak_ptr<cti::detail::transforms::wait_frame<cti::result<int> > >’ to ‘cti::detail::transforms::unlocker<cti::result<int> >&&’
  191 |   unlocker(unlocker&&) = default;
      |            ^~~~~~~~~~
/home/kasper/Documents/continuable/include/continuable/detail/transforms/wait.hpp: In instantiation of ‘Result cti::detail::transforms::wait_unsafe(cti::continuable_base<Data, Annotation>&&, Waiter&&) [with Data = cti::detail::base::proxy_continuable<cti::detail::identity<int, int>, supplier_of<int, int>(int&&, int&&)::<lambda(auto:94&&)> >; Annotation = cti::detail::identity<int, int>; Waiter = cti::transforms::wait_for<long int, std::ratio<1, 1000> >(std::chrono::duration<long int, std::ratio<1, 1000> >)::<lambda(auto:46&&)>::<lambda(cti::detail::transforms::condition_variable_t&, cti::detail::transforms::lock_t&, auto:47&&)>; Result = cti::result<int, int>]’:
/home/kasper/Documents/continuable/include/continuable/transforms/wait.hpp:99:43:   required from ‘cti::transforms::wait_for<long int, std::ratio<1, 1000> >(std::chrono::duration<long int, std::ratio<1, 1000> >)::<lambda(auto:46&&)> [with auto:46 = cti::continuable_base<cti::detail::base::proxy_continuable<cti::detail::identity<int, int>, supplier_of<int, int>(int&&, int&&)::<lambda(auto:94&&)> >, cti::detail::identity<int, int> >]’
/home/kasper/Documents/continuable/include/continuable/continuable-base.hpp:480:38:   required from ‘auto cti::continuable_base<Data, Annotation>::apply(T&&) && [with T = cti::transforms::wait_for<long int, std::ratio<1, 1000> >(std::chrono::duration<long int, std::ratio<1, 1000> >)::<lambda(auto:46&&)>; Data = cti::detail::base::proxy_continuable<cti::detail::identity<int, int>, supplier_of<int, int>(int&&, int&&)::<lambda(auto:94&&)> >; Annotation = cti::detail::identity<int, int>]’
/home/kasper/Documents/continuable/test/unit-test/async/test-continuable-async.cpp:171:3:   required from ‘void single_dimension_tests_wait_for_test_sync_Test<gtest_TypeParam_>::TestBody() [with gtest_TypeParam_ = provide_copyable]’
/home/kasper/Documents/continuable/test/unit-test/async/test-continuable-async.cpp:164:1:   required from here
/home/kasper/Documents/continuable/include/continuable/detail/transforms/wait.hpp:241:12: error: no matching function for call to ‘cti::detail::transforms::unlocker<cti::result<int, int> >::unlocker(<brace-enclosed initializer list>)’
  240 |   std::move(continuable)
      |   ~~~~~~~~~~~~~~~~~~~~~~
  241 |       .next(unlocker<Result>{std::weak_ptr<frame_t>(frame)})
      |       ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/kasper/Documents/continuable/include/continuable/detail/transforms/wait.hpp:191:3: note: candidate: ‘cti::detail::transforms::unlocker<Result>::unlocker(cti::detail::transforms::unlocker<Result>&&) [with Result = cti::result<int, int>]’
  191 |   unlocker(unlocker&&) = default;
      |   ^~~~~~~~
/home/kasper/Documents/continuable/include/continuable/detail/transforms/wait.hpp:191:12: note:   no known conversion for argument 1 from ‘std::weak_ptr<cti::detail::transforms::wait_frame<cti::result<int, int> > >’ to ‘cti::detail::transforms::unlocker<cti::result<int, int> >&&’
  191 |   unlocker(unlocker&&) = default;
      |            ^~~~~~~~~~
/home/kasper/Documents/continuable/include/continuable/detail/transforms/wait.hpp: In instantiation of ‘Result cti::detail::transforms::wait_unsafe(cti::continuable_base<Data, Annotation>&&, Waiter&&) [with Data = cti::detail::base::proxy_continuable<cti::detail::identity<>, single_dimension_tests_wait_for_test_sync_Test<provide_copyable>::TestBody()::<lambda(auto:100&&)> >; Annotation = cti::detail::identity<>; Waiter = cti::transforms::wait_for<long int, std::ratio<1, 1000> >(std::chrono::duration<long int, std::ratio<1, 1000> >)::<lambda(auto:46&&)>::<lambda(cti::detail::transforms::condition_variable_t&, cti::detail::transforms::lock_t&, auto:47&&)>; Result = cti::result<>]’:
/home/kasper/Documents/continuable/include/continuable/transforms/wait.hpp:99:43:   required from ‘cti::transforms::wait_for<long int, std::ratio<1, 1000> >(std::chrono::duration<long int, std::ratio<1, 1000> >)::<lambda(auto:46&&)> [with auto:46 = cti::continuable_base<cti::detail::base::proxy_continuable<cti::detail::identity<>, single_dimension_tests_wait_for_test_sync_Test<provide_copyable>::TestBody()::<lambda(auto:100&&)> >, cti::detail::identity<> >]’
/home/kasper/Documents/continuable/include/continuable/continuable-base.hpp:480:38:   required from ‘auto cti::continuable_base<Data, Annotation>::apply(T&&) && [with T = cti::transforms::wait_for<long int, std::ratio<1, 1000> >(std::chrono::duration<long int, std::ratio<1, 1000> >)::<lambda(auto:46&&)>; Data = cti::detail::base::proxy_continuable<cti::detail::identity<>, single_dimension_tests_wait_for_test_sync_Test<provide_copyable>::TestBody()::<lambda(auto:100&&)> >; Annotation = cti::detail::identity<>]’
/home/kasper/Documents/continuable/test/unit-test/async/test-continuable-async.cpp:176:3:   required from ‘void single_dimension_tests_wait_for_test_sync_Test<gtest_TypeParam_>::TestBody() [with gtest_TypeParam_ = provide_copyable]’
/home/kasper/Documents/continuable/test/unit-test/async/test-continuable-async.cpp:164:1:   required from here
/home/kasper/Documents/continuable/include/continuable/detail/transforms/wait.hpp:241:12: error: no matching function for call to ‘cti::detail::transforms::unlocker<cti::result<> >::unlocker(<brace-enclosed initializer list>)’
  240 |   std::move(continuable)
      |   ~~~~~~~~~~~~~~~~~~~~~~
  241 |       .next(unlocker<Result>{std::weak_ptr<frame_t>(frame)})
      |       ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/kasper/Documents/continuable/include/continuable/detail/transforms/wait.hpp:191:3: note: candidate: ‘cti::detail::transforms::unlocker<Result>::unlocker(cti::detail::transforms::unlocker<Result>&&) [with Result = cti::result<>]’
  191 |   unlocker(unlocker&&) = default;
      |   ^~~~~~~~
/home/kasper/Documents/continuable/include/continuable/detail/transforms/wait.hpp:191:12: note:   no known conversion for argument 1 from ‘std::weak_ptr<cti::detail::transforms::wait_frame<cti::result<> > >’ to ‘cti::detail::transforms::unlocker<cti::result<> >&&’
  191 |   unlocker(unlocker&&) = default;
      |            ^~~~~~~~~~
/home/kasper/Documents/continuable/include/continuable/detail/transforms/wait.hpp: In instantiation of ‘Result cti::detail::transforms::wait_unsafe(cti::continuable_base<Data, Annotation>&&, Waiter&&) [with Data = cti::detail::base::proxy_continuable<cti::detail::identity<>, cti::detail::operations::async<single_dimension_tests_wait_for_test_unlocked_empty_result_Test<provide_copyable>::TestBody()::<lambda()>, cti::detail::types::this_thread_executor_tag>(single_dimension_tests_wait_for_test_unlocked_empty_result_Test<provide_copyable>::TestBody()::<lambda()>&&, cti::detail::types::this_thread_executor_tag&&)::<lambda(auto:62&&)> >; Annotation = cti::detail::identity<>; Waiter = cti::transforms::wait_for<long int, std::ratio<3600> >(std::chrono::duration<long int, std::ratio<3600> >)::<lambda(auto:46&&)>::<lambda(cti::detail::transforms::condition_variable_t&, cti::detail::transforms::lock_t&, auto:47&&)>; Result = cti::result<>]’:
/home/kasper/Documents/continuable/include/continuable/transforms/wait.hpp:99:43:   required from ‘cti::transforms::wait_for<long int, std::ratio<3600> >(std::chrono::duration<long int, std::ratio<3600> >)::<lambda(auto:46&&)> [with auto:46 = cti::continuable_base<cti::detail::base::proxy_continuable<cti::detail::identity<>, cti::detail::operations::async<single_dimension_tests_wait_for_test_unlocked_empty_result_Test<provide_copyable>::TestBody()::<lambda()>, cti::detail::types::this_thread_executor_tag>(single_dimension_tests_wait_for_test_unlocked_empty_result_Test<provide_copyable>::TestBody()::<lambda()>&&, cti::detail::types::this_thread_executor_tag&&)::<lambda(auto:62&&)> >, cti::detail::identity<> >]’
/home/kasper/Documents/continuable/include/continuable/continuable-base.hpp:480:38:   required from ‘auto cti::continuable_base<Data, Annotation>::apply(T&&) && [with T = cti::transforms::wait_for<long int, std::ratio<3600> >(std::chrono::duration<long int, std::ratio<3600> >)::<lambda(auto:46&&)>; Data = cti::detail::base::proxy_continuable<cti::detail::identity<>, cti::detail::operations::async<single_dimension_tests_wait_for_test_unlocked_empty_result_Test<provide_copyable>::TestBody()::<lambda()>, cti::detail::types::this_thread_executor_tag>(single_dimension_tests_wait_for_test_unlocked_empty_result_Test<provide_copyable>::TestBody()::<lambda()>&&, cti::detail::types::this_thread_executor_tag&&)::<lambda(auto:62&&)> >; Annotation = cti::detail::identity<>]’
/home/kasper/Documents/continuable/test/unit-test/async/test-continuable-async.cpp:156:3:   required from ‘void single_dimension_tests_wait_for_test_unlocked_empty_result_Test<gtest_TypeParam_>::TestBody() [with gtest_TypeParam_ = provide_copyable]’
/home/kasper/Documents/continuable/test/unit-test/async/test-continuable-async.cpp:155:1:   required from here
/home/kasper/Documents/continuable/include/continuable/detail/transforms/wait.hpp:241:12: error: no matching function for call to ‘cti::detail::transforms::unlocker<cti::result<> >::unlocker(<brace-enclosed initializer list>)’
  240 |   std::move(continuable)
      |   ~~~~~~~~~~~~~~~~~~~~~~
  241 |       .next(unlocker<Result>{std::weak_ptr<frame_t>(frame)})
      |       ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/kasper/Documents/continuable/include/continuable/detail/transforms/wait.hpp:191:3: note: candidate: ‘cti::detail::transforms::unlocker<Result>::unlocker(cti::detail::transforms::unlocker<Result>&&) [with Result = cti::result<>]’
  191 |   unlocker(unlocker&&) = default;
      |   ^~~~~~~~
/home/kasper/Documents/continuable/include/continuable/detail/transforms/wait.hpp:191:12: note:   no known conversion for argument 1 from ‘std::weak_ptr<cti::detail::transforms::wait_frame<cti::result<> > >’ to ‘cti::detail::transforms::unlocker<cti::result<> >&&’
  191 |   unlocker(unlocker&&) = default;
      |            ^~~~~~~~~~
/home/kasper/Documents/continuable/include/continuable/detail/transforms/wait.hpp: In instantiation of ‘Result cti::detail::transforms::wait_unsafe(cti::continuable_base<Data, Annotation>&&, Waiter&&) [with Data = cti::detail::base::chained_continuation<cti::detail::identity<>, cti::detail::identity<>, cti::detail::base::handle_results::no, cti::detail::base::handle_errors::forward, cti::detail::base::ready_continuation<>, cti::detail::base::detail::exception_stripper_proxy<single_dimension_tests_wait_for_test_exception_unlocked_void_failure_handle_Test<provide_copyable>::TestBody()::<lambda(cti::exception_t)> >, cti::detail::types::this_thread_executor_tag>; Annotation = cti::detail::identity<>; Waiter = cti::transforms::wait_for<long int, std::ratio<3600> >(std::chrono::duration<long int, std::ratio<3600> >)::<lambda(auto:46&&)>::<lambda(cti::detail::transforms::condition_variable_t&, cti::detail::transforms::lock_t&, auto:47&&)>; Result = cti::result<>]’:
/home/kasper/Documents/continuable/include/continuable/transforms/wait.hpp:99:43:   required from ‘cti::transforms::wait_for<long int, std::ratio<3600> >(std::chrono::duration<long int, std::ratio<3600> >)::<lambda(auto:46&&)> [with auto:46 = cti::continuable_base<cti::detail::base::chained_continuation<cti::detail::identity<>, cti::detail::identity<>, cti::detail::base::handle_results::no, cti::detail::base::handle_errors::forward, cti::detail::base::ready_continuation<>, cti::detail::base::detail::exception_stripper_proxy<single_dimension_tests_wait_for_test_exception_unlocked_void_failure_handle_Test<provide_copyable>::TestBody()::<lambda(cti::exception_t)> >, cti::detail::types::this_thread_executor_tag>, cti::detail::identity<> >]’
/home/kasper/Documents/continuable/include/continuable/continuable-base.hpp:480:38:   required from ‘auto cti::continuable_base<Data, Annotation>::apply(T&&) && [with T = cti::transforms::wait_for<long int, std::ratio<3600> >(std::chrono::duration<long int, std::ratio<3600> >)::<lambda(auto:46&&)>; Data = cti::detail::base::chained_continuation<cti::detail::identity<>, cti::detail::identity<>, cti::detail::base::handle_results::no, cti::detail::base::handle_errors::forward, cti::detail::base::ready_continuation<>, cti::detail::base::detail::exception_stripper_proxy<single_dimension_tests_wait_for_test_exception_unlocked_void_failure_handle_Test<provide_copyable>::TestBody()::<lambda(cti::exception_t)> >, cti::detail::types::this_thread_executor_tag>; Annotation = cti::detail::identity<>]’
/home/kasper/Documents/continuable/test/unit-test/async/test-continuable-async.cpp:149:3:   required from ‘void single_dimension_tests_wait_for_test_exception_unlocked_void_failure_handle_Test<gtest_TypeParam_>::TestBody() [with gtest_TypeParam_ = provide_copyable]’
/home/kasper/Documents/continuable/test/unit-test/async/test-continuable-async.cpp:147:1:   required from here
/home/kasper/Documents/continuable/include/continuable/detail/transforms/wait.hpp:241:12: error: no matching function for call to ‘cti::detail::transforms::unlocker<cti::result<> >::unlocker(<brace-enclosed initializer list>)’
  240 |   std::move(continuable)
      |   ~~~~~~~~~~~~~~~~~~~~~~
  241 |       .next(unlocker<Result>{std::weak_ptr<frame_t>(frame)})
      |       ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/kasper/Documents/continuable/include/continuable/detail/transforms/wait.hpp:191:3: note: candidate: ‘cti::detail::transforms::unlocker<Result>::unlocker(cti::detail::transforms::unlocker<Result>&&) [with Result = cti::result<>]’
  191 |   unlocker(unlocker&&) = default;
      |   ^~~~~~~~
/home/kasper/Documents/continuable/include/continuable/detail/transforms/wait.hpp:191:12: note:   no known conversion for argument 1 from ‘std::weak_ptr<cti::detail::transforms::wait_frame<cti::result<> > >’ to ‘cti::detail::transforms::unlocker<cti::result<> >&&’
  191 |   unlocker(unlocker&&) = default;
      |            ^~~~~~~~~~
make[2]: *** [test/unit-test/CMakeFiles/test-continuable-async.dir/build.make:76: test/unit-test/CMakeFiles/test-continuable-async.dir/async/test-continuable-async.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:593: test/unit-test/CMakeFiles/test-continuable-async.dir/all] Error 2
make: *** [Makefile:166: all] Error 2

Your Environment