alibaba / async_simple

Simple, light-weight and easy-to-use asynchronous components

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

async_simple/coro/Lazy.h:239:16: error: moving a temporary object prevents copy elision [-Werror=pessimizing-move]

topazus opened this issue · comments

What happened + What you expected to happen

Reproduction way

❯ git clone --depth=1 https://github.com/alibaba/async_simple
Cloning into 'async_simple'...
remote: Enumerating objects: 959, done.
remote: Counting objects: 100% (959/959), done.
remote: Compressing objects: 100% (638/638), done.
remote: Total 959 (delta 345), reused 810 (delta 311), pack-reused 0
Receiving objects: 100% (959/959), 2.50 MiB | 4.30 MiB/s, done.
Resolving deltas: 100% (345/345), done.

❯ git log
commit 5439d81bfd7fe83baf8b2291fdd197414b7cc43a (grafted, HEAD -> main, origin/main, origin/HEAD)
Author: kang jinci <1158035520@qq.com>
Date:   Thu Apr 13 10:10:21 2023 +0800

    fix: GCC 12 issues a spurious uninitialized-var warning (#301)

ruby in 🌐 fedora in ~/build took 2s 
❯ cd async_simple/

ruby in 🌐 fedora in async_simple on  main is 📦 v1.0.0 via △ v3.26.2 via 🌙 v5.4.4 via  v19.8.1 via 🐍 v3.11.2 
❯ cmake . -B build 
-- The CXX compiler identification is GNU 13.0.1
-- The C compiler identification is GNU 13.0.1
-- The ASM compiler identification is GNU
-- Found assembler: /usr/lib64/ccache/cc
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/lib64/ccache/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/lib64/ccache/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- CMAKE_MODULE_PATH: /home/ruby/build/async_simple/cmake
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE  
-- FindAio.cmake: 
-- Found Benchmark: /usr/lib64/libbenchmark.so  
-- aio found
-- aio: /usr/include, /usr/lib64/libaio.so.
-- use system GTest
-- Found GMock: /usr/lib64/libgmock.so  
-- Found GTest: /usr/lib64/libgtest.so  
-- GTest found.
-- GTest: /usr/include, /usr/lib64/libgtest.so
-- GMock found.
-- GMock: /usr/include, /usr/lib64/libgmock.so
-- Benchmark found.
-- Benchmark: /usr/include, /usr/lib64/libbenchmark.so
-- Use flag -m64
-- Uthread on
-- Building benchmarks
-- Configuring done (0.4s)
-- Generating done (0.0s)
-- Build files have been written to: /home/ruby/build/async_simple/build

ruby in 🌐 fedora in async_simple on  main is 📦 v1.0.0 via △ v3.26.2 via 🌙 v5.4.4 via  v19.8.1 via 🐍 v3.11.2 
❯ cmake --build build/ -j6
[  5%] Building CXX object demo_example/CMakeFiles/block_echo_server.dir/block_echo_server.cpp.o
[  5%] Building CXX object async_simple/CMakeFiles/async_simple.dir/executors/SimpleExecutor.cpp.o
[  5%] Building CXX object async_simple/CMakeFiles/async_simple_static.dir/executors/SimpleExecutor.cpp.o
[  5%] Building CXX object demo_example/CMakeFiles/block_echo_client.dir/block_echo_client.cpp.o
[  8%] Building CXX object async_simple/CMakeFiles/async_simple_static.dir/uthread/internal/thread.cc.o
[  6%] Building CXX object async_simple/CMakeFiles/async_simple.dir/uthread/internal/thread.cc.o
[ 10%] Linking CXX executable block_echo_client
[ 10%] Linking CXX executable block_echo_server
[ 10%] Built target block_echo_client
[ 10%] Built target block_echo_server
[ 13%] Building ASM object async_simple/CMakeFiles/async_simple_static.dir/uthread/internal/Linux/x86_64/jump_x86_64_sysv_elf_gas.S.o
[ 13%] Building ASM object async_simple/CMakeFiles/async_simple.dir/uthread/internal/Linux/x86_64/jump_x86_64_sysv_elf_gas.S.o
[ 16%] Building ASM object async_simple/CMakeFiles/async_simple_static.dir/uthread/internal/Linux/x86_64/make_x86_64_sysv_elf_gas.S.o
[ 16%] Building ASM object async_simple/CMakeFiles/async_simple.dir/uthread/internal/Linux/x86_64/make_x86_64_sysv_elf_gas.S.o
[ 18%] Building ASM object async_simple/CMakeFiles/async_simple_static.dir/uthread/internal/Linux/x86_64/ontop_x86_64_sysv_elf_gas.S.o
[ 18%] Building ASM object async_simple/CMakeFiles/async_simple.dir/uthread/internal/Linux/x86_64/ontop_x86_64_sysv_elf_gas.S.o
[ 20%] Linking CXX shared library libasync_simple.so
[ 21%] Linking CXX static library libasync_simple.a
[ 21%] Built target async_simple
[ 21%] Built target async_simple_static
[ 24%] Building CXX object async_simple/test/CMakeFiles/async_simple_test.dir/FutureStateTest.cpp.o
[ 24%] Building CXX object async_simple/coro/test/CMakeFiles/async_simple_coro_test.dir/ConditionVariableTest.cpp.o
[ 27%] Building CXX object async_simple/util/test/CMakeFiles/async_simple_util_test.dir/ThreadPoolTest.cpp.o
[ 27%] Building CXX object async_simple/uthread/test/CMakeFiles/async_simple_uthread_test.dir/UthreadTest.cpp.o
[ 28%] Building CXX object async_simple/executors/test/CMakeFiles/async_simple_executor_test.dir/SimpleIOExecutorTest.cpp.o
[ 29%] Building CXX object demo_example/CMakeFiles/CountChar.dir/CountChar.cpp.o
[ 31%] Building CXX object async_simple/util/test/CMakeFiles/async_simple_util_test.dir/__/__/test/dotest.cpp.o
[ 32%] Linking CXX executable async_simple_util_test
[ 32%] Built target async_simple_util_test
[ 33%] Building CXX object async_simple/uthread/test/CMakeFiles/async_simple_uthread_test.dir/__/__/test/dotest.cpp.o
[ 35%] Building CXX object async_simple/coro/test/CMakeFiles/async_simple_coro_test.dir/FutureAwaiterTest.cpp.o
In file included from /home/ruby/build/async_simple/demo_example/CountChar.cpp:24:
/home/ruby/build/async_simple/async_simple/coro/Lazy.h: In instantiation of ‘async_simple::Try<T> async_simple::coro::detail::LazyAwaiterBase<T>::awaitResumeTry() [with T = int]’:
/home/ruby/build/async_simple/async_simple/coro/Lazy.h:282:47:   required from ‘async_simple::Try<T> async_simple::coro::detail::LazyBase<T, reschedule>::TryAwaiter::await_resume() [with T = int; bool reschedule = false]’
/home/ruby/build/async_simple/async_simple/coro/Lazy.h:325:16:   required from ‘void async_simple::coro::detail::LazyBase<T, reschedule>::start(F&&) requires  is_invocable_v<F&&, async_simple::Try<T> > [with F = async_simple::coro::syncAwait<Lazy<int> >(Lazy<int>&&)::<lambda(async_simple::Try<int>)>; T = int; bool reschedule = false]’
/home/ruby/build/async_simple/async_simple/coro/SyncAwait.h:44:15:   required from ‘auto async_simple::coro::syncAwait(LazyType&&) [with LazyType = Lazy<int>]’
/home/ruby/build/async_simple/demo_example/CountChar.cpp:58:24:   required from here
/home/ruby/build/async_simple/async_simple/coro/Lazy.h:239:16: error: moving a temporary object prevents copy elision [-Werror=pessimizing-move]
  239 |         Try<T> ret = std::move(_handle.promise().tryResult());
      |                ^~~
/home/ruby/build/async_simple/async_simple/coro/Lazy.h:239:16: note: remove ‘std::move’ call
cc1plus: note: unrecognized command-line option ‘-Wno-deprecated-register’ may have been intended to silence earlier diagnostics
cc1plus: all warnings being treated as errors
gmake[2]: *** [demo_example/CMakeFiles/CountChar.dir/build.make:76: demo_example/CMakeFiles/CountChar.dir/CountChar.cpp.o] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:429: demo_example/CMakeFiles/CountChar.dir/all] Error 2
gmake[1]: *** Waiting for unfinished jobs....
[ 36%] Building CXX object async_simple/coro/test/CMakeFiles/async_simple_coro_test.dir/GeneratorTest.cpp.o
[ 37%] Building CXX object async_simple/executors/test/CMakeFiles/async_simple_executor_test.dir/__/__/test/dotest.cpp.o
[ 39%] Linking CXX executable async_simple_executor_test
[ 39%] Built target async_simple_executor_test
[ 40%] Building CXX object async_simple/coro/test/CMakeFiles/async_simple_coro_test.dir/LatchTest.cpp.o
[ 41%] Building CXX object async_simple/test/CMakeFiles/async_simple_test.dir/FutureTest.cpp.o
In file included from /home/ruby/build/async_simple/async_simple/coro/test/FutureAwaiterTest.cpp:19:
/home/ruby/build/async_simple/async_simple/coro/Lazy.h: In instantiation of ‘async_simple::Try<T> async_simple::coro::detail::LazyAwaiterBase<T>::awaitResumeTry() [with T = void]’:
/home/ruby/build/async_simple/async_simple/coro/Lazy.h:282:47:   required from ‘async_simple::Try<T> async_simple::coro::detail::LazyBase<T, reschedule>::TryAwaiter::await_resume() [with T = void; bool reschedule = false]’
/home/ruby/build/async_simple/async_simple/coro/Lazy.h:325:16:   required from ‘void async_simple::coro::detail::LazyBase<T, reschedule>::start(F&&) requires  is_invocable_v<F&&, async_simple::Try<T> > [with F = async_simple::coro::syncAwait<Lazy<void> >(Lazy<void>&&)::<lambda(async_simple::Try<void>)>; T = void; bool reschedule = false]’
/home/ruby/build/async_simple/async_simple/coro/SyncAwait.h:44:15:   required from ‘auto async_simple::coro::syncAwait(LazyType&&) [with LazyType = Lazy<void>]’
/home/ruby/build/async_simple/async_simple/coro/test/FutureAwaiterTest.cpp:49:14:   required from here
/home/ruby/build/async_simple/async_simple/coro/Lazy.h:239:16: error: moving a temporary object prevents copy elision [-Werror=pessimizing-move]
  239 |         Try<T> ret = std::move(_handle.promise().tryResult());
      |                ^~~
/home/ruby/build/async_simple/async_simple/coro/Lazy.h:239:16: note: remove ‘std::move’ call
cc1plus: note: unrecognized command-line option ‘-Wno-deprecated-register’ may have been intended to silence earlier diagnostics
cc1plus: all warnings being treated as errors
gmake[2]: *** [async_simple/coro/test/CMakeFiles/async_simple_coro_test.dir/build.make:90: async_simple/coro/test/CMakeFiles/async_simple_coro_test.dir/FutureAwaiterTest.cpp.o] Error 1
gmake[2]: *** Waiting for unfinished jobs....
[ 43%] Building CXX object async_simple/test/CMakeFiles/async_simple_test.dir/TryTest.cpp.o
[ 44%] Building CXX object async_simple/test/CMakeFiles/async_simple_test.dir/dotest.cpp.o
In file included from /home/ruby/build/async_simple/async_simple/coro/ConditionVariable.h:19,
                 from /home/ruby/build/async_simple/async_simple/coro/test/ConditionVariableTest.cpp:17:
/home/ruby/build/async_simple/async_simple/coro/Lazy.h: In instantiation of ‘async_simple::Try<T> async_simple::coro::detail::LazyAwaiterBase<T>::awaitResumeTry() [with T = void]’:
/home/ruby/build/async_simple/async_simple/coro/Lazy.h:282:47:   required from ‘async_simple::Try<T> async_simple::coro::detail::LazyBase<T, reschedule>::TryAwaiter::await_resume() [with T = void; bool reschedule = true]’
/home/ruby/build/async_simple/async_simple/coro/Lazy.h:325:16:   required from ‘void async_simple::coro::detail::LazyBase<T, reschedule>::start(F&&) requires  is_invocable_v<F&&, async_simple::Try<T> > [with F = async_simple::coro::ConditionVariableTest_testSingleWait_Test::TestBody()::<lambda(async_simple::Try<void>)>; T = void; bool reschedule = true]’
/home/ruby/build/async_simple/async_simple/coro/test/ConditionVariableTest.cpp:67:29:   required from here
/home/ruby/build/async_simple/async_simple/coro/Lazy.h:239:16: error: moving a temporary object prevents copy elision [-Werror=pessimizing-move]
  239 |         Try<T> ret = std::move(_handle.promise().tryResult());
      |                ^~~
/home/ruby/build/async_simple/async_simple/coro/Lazy.h:239:16: note: remove ‘std::move’ call
cc1plus: note: unrecognized command-line option ‘-Wno-deprecated-register’ may have been intended to silence earlier diagnostics
cc1plus: all warnings being treated as errors
gmake[2]: *** [async_simple/coro/test/CMakeFiles/async_simple_coro_test.dir/build.make:76: async_simple/coro/test/CMakeFiles/async_simple_coro_test.dir/ConditionVariableTest.cpp.o] Error 1
In file included from /home/ruby/build/async_simple/async_simple/coro/ConditionVariable.h:19,
                 from /home/ruby/build/async_simple/async_simple/coro/Latch.h:22,
                 from /home/ruby/build/async_simple/async_simple/coro/test/LatchTest.cpp:17:
/home/ruby/build/async_simple/async_simple/coro/Lazy.h: In instantiation of ‘async_simple::Try<T> async_simple::coro::detail::LazyAwaiterBase<T>::awaitResumeTry() [with T = void]’:
/home/ruby/build/async_simple/async_simple/coro/Lazy.h:282:47:   required from ‘async_simple::Try<T> async_simple::coro::detail::LazyBase<T, reschedule>::TryAwaiter::await_resume() [with T = void; bool reschedule = true]’
/home/ruby/build/async_simple/async_simple/coro/Lazy.h:325:16:   required from ‘void async_simple::coro::detail::LazyBase<T, reschedule>::start(F&&) requires  is_invocable_v<F&&, async_simple::Try<T> > [with F = async_simple::coro::syncAwait<RescheduleLazy<void> >(RescheduleLazy<void>&&)::<lambda(async_simple::Try<void>)>; T = void; bool reschedule = true]’
/home/ruby/build/async_simple/async_simple/coro/SyncAwait.h:44:15:   required from ‘auto async_simple::coro::syncAwait(LazyType&&) [with LazyType = RescheduleLazy<void>]’
/home/ruby/build/async_simple/async_simple/coro/test/LatchTest.cpp:74:14:   required from here
/home/ruby/build/async_simple/async_simple/coro/Lazy.h:239:16: error: moving a temporary object prevents copy elision [-Werror=pessimizing-move]
  239 |         Try<T> ret = std::move(_handle.promise().tryResult());
      |                ^~~
/home/ruby/build/async_simple/async_simple/coro/Lazy.h:239:16: note: remove ‘std::move’ call
cc1plus: note: unrecognized command-line option ‘-Wno-deprecated-register’ may have been intended to silence earlier diagnostics
cc1plus: all warnings being treated as errors
gmake[2]: *** [async_simple/coro/test/CMakeFiles/async_simple_coro_test.dir/build.make:118: async_simple/coro/test/CMakeFiles/async_simple_coro_test.dir/LatchTest.cpp.o] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:351: async_simple/coro/test/CMakeFiles/async_simple_coro_test.dir/all] Error 2
In file included from /home/ruby/build/async_simple/async_simple/uthread/test/UthreadTest.cpp:21:
/home/ruby/build/async_simple/async_simple/coro/Lazy.h: In instantiation of ‘async_simple::Try<T> async_simple::coro::detail::LazyAwaiterBase<T>::awaitResumeTry() [with T = void]’:
/home/ruby/build/async_simple/async_simple/coro/Lazy.h:282:47:   required from ‘async_simple::Try<T> async_simple::coro::detail::LazyBase<T, reschedule>::TryAwaiter::await_resume() [with T = void; bool reschedule = false]’
/home/ruby/build/async_simple/async_simple/coro/Lazy.h:325:16:   required from ‘void async_simple::coro::detail::LazyBase<T, reschedule>::start(F&&) requires  is_invocable_v<F&&, async_simple::Try<T> > [with F = async_simple::uthread::await<async_simple::coro::Lazy<int> (UthreadTest::*)(int, int), UthreadTest_testAwaitCoroutine_Test*, int, int>(async_simple::Executor*, async_simple::coro::Lazy<int> (UthreadTest::*&&)(int, int), UthreadTest_testAwaitCoroutine_Test*&&, int&&, int&&) requires  is_invocable_v<Fn&&, Args&&...>::<lambda(auto:54&&)>; T = void; bool reschedule = false]’
/home/ruby/build/async_simple/async_simple/uthread/Await.h:99:15:   required from ‘decltype(auto) async_simple::uthread::await(async_simple::Executor*, Fn&&, Args&& ...) requires  is_invocable_v<Fn&&, Args&&...> [with Fn = async_simple::coro::Lazy<int> (UthreadTest::*)(int, int); Args = {UthreadTest_testAwaitCoroutine_Test*, int, int}]’
/home/ruby/build/async_simple/async_simple/uthread/test/UthreadTest.cpp:271:18:   required from here
/home/ruby/build/async_simple/async_simple/coro/Lazy.h:239:16: error: moving a temporary object prevents copy elision [-Werror=pessimizing-move]
  239 |         Try<T> ret = std::move(_handle.promise().tryResult());
      |                ^~~
/home/ruby/build/async_simple/async_simple/coro/Lazy.h:239:16: note: remove ‘std::move’ call
In file included from /usr/include/c++/13/exception:164,
                 from /home/ruby/build/async_simple/async_simple/uthread/test/UthreadTest.cpp:16:
In constructor ‘std::__exception_ptr::exception_ptr::exception_ptr(std::__exception_ptr::exception_ptr&&)’,
    inlined from ‘std::__exception_ptr::exception_ptr& std::__exception_ptr::exception_ptr::operator=(std::__exception_ptr::exception_ptr&&)’ at /usr/include/c++/13/bits/exception_ptr.h:142:9,
    inlined from ‘std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::operator=(std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&&)::<lambda(auto:23&&, auto:24)> mutable [with auto:23 = std::__exception_ptr::exception_ptr&; auto:24 = std::integral_constant<long unsigned int, 2>]’ at /usr/include/c++/13/variant:697:34,
    inlined from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = void; _Fn = __detail::__variant::_Move_assign_base<false, monostate, async_simple::Unit, __exception_ptr::exception_ptr>::operator=(std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&&)::<lambda(auto:23&&, auto:24)>; _Args = {__exception_ptr::exception_ptr&, integral_constant<long unsigned int, 2>}]’ at /usr/include/c++/13/bits/invoke.h:61:36,
    inlined from ‘constexpr typename std::__invoke_result<_Functor, _ArgTypes>::type std::__invoke(_Callable&&, _Args&& ...) [with _Callable = __detail::__variant::_Move_assign_base<false, monostate, async_simple::Unit, __exception_ptr::exception_ptr>::operator=(std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&&)::<lambda(auto:23&&, auto:24)>; _Args = {__exception_ptr::exception_ptr&, integral_constant<long unsigned int, 2>}]’ at /usr/include/c++/13/bits/invoke.h:96:40,
    inlined from ‘static constexpr decltype(auto) std::__detail::__variant::__gen_vtable_impl<std::__detail::__variant::_Multi_array<_Result_type (*)(_Visitor, _Variants ...)>, std::integer_sequence<long unsigned int, __indices ...> >::__visit_invoke(_Visitor&&, _Variants ...) [with _Result_type = std::__detail::__variant::__variant_idx_cookie; _Visitor = std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::operator=(std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&&)::<lambda(auto:23&&, auto:24)>&&; _Variants = {std::variant<std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&}; long unsigned int ...__indices = {2}]’ at /usr/include/c++/13/variant:1021:17,
    inlined from ‘constexpr decltype(auto) std::__do_visit(_Visitor&&, _Variants&& ...) [with _Result_type = __detail::__variant::__variant_idx_cookie; _Visitor = __detail::__variant::_Move_assign_base<false, monostate, async_simple::Unit, __exception_ptr::exception_ptr>::operator=(std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&&)::<lambda(auto:23&&, auto:24)>; _Variants = {variant<monostate, async_simple::Unit, __exception_ptr::exception_ptr>&}]’ at /usr/include/c++/13/variant:1793:5,
    inlined from ‘constexpr decltype(auto) std::__do_visit(_Visitor&&, _Variants&& ...) [with _Result_type = __detail::__variant::__variant_idx_cookie; _Visitor = __detail::__variant::_Move_assign_base<false, monostate, async_simple::Unit, __exception_ptr::exception_ptr>::operator=(std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&&)::<lambda(auto:23&&, auto:24)>; _Variants = {variant<monostate, async_simple::Unit, __exception_ptr::exception_ptr>&}]’ at /usr/include/c++/13/variant:1732:5,
    inlined from ‘constexpr void std::__detail::__variant::__raw_idx_visit(_Visitor&&, _Variants&& ...) [with _Visitor = _Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::operator=(std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&&)::<lambda(auto:23&&, auto:24)>; _Variants = {std::variant<std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&}]’ at /usr/include/c++/13/variant:183:44,
    inlined from ‘constexpr std::__detail::__variant::_Move_assign_base<<anonymous>, _Types>& std::__detail::__variant::_Move_assign_base<<anonymous>, _Types>::operator=(std::__detail::__variant::_Move_assign_base<<anonymous>, _Types>&&) [with bool <anonymous> = false; _Types = {std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr}]’ at /usr/include/c++/13/variant:690:28,
    inlined from ‘constexpr std::__detail::__variant::_Variant_base<_Types>& std::__detail::__variant::_Variant_base<_Types>::operator=(std::__detail::__variant::_Variant_base<_Types>&&) [with _Types = {std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr}]’ at /usr/include/c++/13/variant:751:22,
    inlined from ‘constexpr std::variant<_Types>& std::variant<_Types>::operator=(std::variant<_Types>&&) [with _Types = {std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr}]’ at /usr/include/c++/13/variant:1407:16,
    inlined from ‘constexpr async_simple::Try<T>& async_simple::Try<T>::operator=(async_simple::Try<T>&&) [with T = async_simple::Unit]’ at /home/ruby/build/async_simple/async_simple/Try.h:61:10,
    inlined from ‘void async_simple::FutureState<T>::setResult(async_simple::Try<T>&&) [with T = async_simple::Unit]’ at /home/ruby/build/async_simple/async_simple/FutureState.h:203:20,
    inlined from ‘void async_simple::Promise<T>::setValue() requires  is_void_v<T> [with T = void]’ at /home/ruby/build/async_simple/async_simple/Promise.h:112:32:
/usr/include/c++/13/bits/exception_ptr.h:124:33: error: ‘*(std::__exception_ptr::exception_ptr*)((char*)&<unnamed> + offsetof(async_simple::Try<async_simple::Unit>,async_simple::Try<async_simple::Unit>::_value.std::variant<std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::<unnamed>.std::__detail::__variant::_Variant_base<std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::<unnamed>.std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::<unnamed>.std::__detail::__variant::_Copy_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::<unnamed>.std::__detail::__variant::_Move_ctor_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::<unnamed>.std::__detail::__variant::_Copy_ctor_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::<unnamed>.std::__detail::__variant::_Variant_storage<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::_M_u)).std::__exception_ptr::exception_ptr::_M_exception_object’ may be used uninitialized [-Werror=maybe-uninitialized]
  124 |       : _M_exception_object(__o._M_exception_object)
      |                             ~~~~^~~~~~~~~~~~~~~~~~~
In file included from /home/ruby/build/async_simple/async_simple/Future.h:23,
                 from /home/ruby/build/async_simple/async_simple/uthread/internal/thread.h:29,
                 from /home/ruby/build/async_simple/async_simple/uthread/Uthread.h:20,
                 from /home/ruby/build/async_simple/async_simple/uthread/Async.h:39,
                 from /home/ruby/build/async_simple/async_simple/uthread/test/UthreadTest.cpp:24:
/home/ruby/build/async_simple/async_simple/Promise.h: In member function ‘void async_simple::Promise<T>::setValue() requires  is_void_v<T> [with T = void]’:
/home/ruby/build/async_simple/async_simple/Promise.h:112:33: note: ‘<anonymous>’ declared here
  112 |         _sharedState->setResult(Try<value_type>(Unit()));
      |                                 ^~~~~~~~~~~~~~~~~~~~~~~
In constructor ‘std::__exception_ptr::exception_ptr::exception_ptr(std::__exception_ptr::exception_ptr&&)’,
    inlined from ‘std::__exception_ptr::exception_ptr& std::__exception_ptr::exception_ptr::operator=(std::__exception_ptr::exception_ptr&&)’ at /usr/include/c++/13/bits/exception_ptr.h:142:9,
    inlined from ‘std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::operator=(std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&&)::<lambda(auto:23&&, auto:24)> mutable [with auto:23 = std::__exception_ptr::exception_ptr&; auto:24 = std::integral_constant<long unsigned int, 2>]’ at /usr/include/c++/13/variant:697:34,
    inlined from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = void; _Fn = __detail::__variant::_Move_assign_base<false, monostate, async_simple::Unit, __exception_ptr::exception_ptr>::operator=(std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&&)::<lambda(auto:23&&, auto:24)>; _Args = {__exception_ptr::exception_ptr&, integral_constant<long unsigned int, 2>}]’ at /usr/include/c++/13/bits/invoke.h:61:36,
    inlined from ‘constexpr typename std::__invoke_result<_Functor, _ArgTypes>::type std::__invoke(_Callable&&, _Args&& ...) [with _Callable = __detail::__variant::_Move_assign_base<false, monostate, async_simple::Unit, __exception_ptr::exception_ptr>::operator=(std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&&)::<lambda(auto:23&&, auto:24)>; _Args = {__exception_ptr::exception_ptr&, integral_constant<long unsigned int, 2>}]’ at /usr/include/c++/13/bits/invoke.h:96:40,
    inlined from ‘static constexpr decltype(auto) std::__detail::__variant::__gen_vtable_impl<std::__detail::__variant::_Multi_array<_Result_type (*)(_Visitor, _Variants ...)>, std::integer_sequence<long unsigned int, __indices ...> >::__visit_invoke(_Visitor&&, _Variants ...) [with _Result_type = std::__detail::__variant::__variant_idx_cookie; _Visitor = std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::operator=(std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&&)::<lambda(auto:23&&, auto:24)>&&; _Variants = {std::variant<std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&}; long unsigned int ...__indices = {2}]’ at /usr/include/c++/13/variant:1021:17,
    inlined from ‘constexpr decltype(auto) std::__do_visit(_Visitor&&, _Variants&& ...) [with _Result_type = __detail::__variant::__variant_idx_cookie; _Visitor = __detail::__variant::_Move_assign_base<false, monostate, async_simple::Unit, __exception_ptr::exception_ptr>::operator=(std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&&)::<lambda(auto:23&&, auto:24)>; _Variants = {variant<monostate, async_simple::Unit, __exception_ptr::exception_ptr>&}]’ at /usr/include/c++/13/variant:1793:5,
    inlined from ‘constexpr decltype(auto) std::__do_visit(_Visitor&&, _Variants&& ...) [with _Result_type = __detail::__variant::__variant_idx_cookie; _Visitor = __detail::__variant::_Move_assign_base<false, monostate, async_simple::Unit, __exception_ptr::exception_ptr>::operator=(std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&&)::<lambda(auto:23&&, auto:24)>; _Variants = {variant<monostate, async_simple::Unit, __exception_ptr::exception_ptr>&}]’ at /usr/include/c++/13/variant:1732:5,
    inlined from ‘constexpr void std::__detail::__variant::__raw_idx_visit(_Visitor&&, _Variants&& ...) [with _Visitor = _Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::operator=(std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&&)::<lambda(auto:23&&, auto:24)>; _Variants = {std::variant<std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&}]’ at /usr/include/c++/13/variant:183:44,
    inlined from ‘constexpr std::__detail::__variant::_Move_assign_base<<anonymous>, _Types>& std::__detail::__variant::_Move_assign_base<<anonymous>, _Types>::operator=(std::__detail::__variant::_Move_assign_base<<anonymous>, _Types>&&) [with bool <anonymous> = false; _Types = {std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr}]’ at /usr/include/c++/13/variant:690:28,
    inlined from ‘constexpr std::__detail::__variant::_Variant_base<_Types>& std::__detail::__variant::_Variant_base<_Types>::operator=(std::__detail::__variant::_Variant_base<_Types>&&) [with _Types = {std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr}]’ at /usr/include/c++/13/variant:751:22,
    inlined from ‘constexpr std::variant<_Types>& std::variant<_Types>::operator=(std::variant<_Types>&&) [with _Types = {std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr}]’ at /usr/include/c++/13/variant:1407:16,
    inlined from ‘constexpr async_simple::Try<T>& async_simple::Try<T>::operator=(async_simple::Try<T>&&) [with T = async_simple::Unit]’ at /home/ruby/build/async_simple/async_simple/Try.h:61:10,
    inlined from ‘void async_simple::FutureState<T>::setResult(async_simple::Try<T>&&) [with T = async_simple::Unit]’ at /home/ruby/build/async_simple/async_simple/FutureState.h:203:20,
    inlined from ‘void async_simple::Promise<T>::setValue() requires  is_void_v<T> [with T = void]’ at /home/ruby/build/async_simple/async_simple/Promise.h:112:32,
    inlined from ‘async_simple::uthread::collectAll(Iterator, Iterator, async_simple::Executor*)::Context::~Context() [with async_simple::uthread::Launch Policy = async_simple::uthread::Launch::Current; Iterator = __gnu_cxx::__normal_iterator<std::function<void()>*, std::vector<std::function<void()> > >]’ at /home/ruby/build/async_simple/async_simple/uthread/Collect.h:87:33,
    inlined from ‘constexpr void std::destroy_at(_Tp*) [with _Tp = async_simple::uthread::collectAll<async_simple::uthread::Launch::Current, __gnu_cxx::__normal_iterator<std::function<void()>*, std::vector<std::function<void()> > > >(__gnu_cxx::__normal_iterator<std::function<void()>*, std::vector<std::function<void()> > >, __gnu_cxx::__normal_iterator<std::function<void()>*, std::vector<std::function<void()> > >, async_simple::Executor*)::Context]’ at /usr/include/c++/13/bits/stl_construct.h:88:18,
    inlined from ‘constexpr void std::_Destroy(_Tp*) [with _Tp = async_simple::uthread::collectAll<async_simple::uthread::Launch::Current, __gnu_cxx::__normal_iterator<std::function<void()>*, std::vector<std::function<void()> > > >(__gnu_cxx::__normal_iterator<std::function<void()>*, std::vector<std::function<void()> > >, __gnu_cxx::__normal_iterator<std::function<void()>*, std::vector<std::function<void()> > >, async_simple::Executor*)::Context]’ at /usr/include/c++/13/bits/stl_construct.h:149:22,
    inlined from ‘static constexpr void std::allocator_traits<std::allocator<void> >::destroy(allocator_type&, _Up*) [with _Up = async_simple::uthread::collectAll<async_simple::uthread::Launch::Current, __gnu_cxx::__normal_iterator<std::function<void()>*, std::vector<std::function<void()> > > >(__gnu_cxx::__normal_iterator<std::function<void()>*, std::vector<std::function<void()> > >, __gnu_cxx::__normal_iterator<std::function<void()>*, std::vector<std::function<void()> > >, async_simple::Executor*)::Context]’ at /usr/include/c++/13/bits/alloc_traits.h:674:17,
    inlined from ‘void std::_Sp_counted_ptr_inplace<_Tp, _Alloc, _Lp>::_M_dispose() [with _Tp = async_simple::uthread::collectAll<async_simple::uthread::Launch::Current, __gnu_cxx::__normal_iterator<std::function<void()>*, std::vector<std::function<void()> > > >(__gnu_cxx::__normal_iterator<std::function<void()>*, std::vector<std::function<void()> > >, __gnu_cxx::__normal_iterator<std::function<void()>*, std::vector<std::function<void()> > >, async_simple::Executor*)::Context; _Alloc = std::allocator<void>; __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]’ at /usr/include/c++/13/bits/shared_ptr_base.h:613:35:
/usr/include/c++/13/bits/exception_ptr.h:124:33: error: ‘*(std::__exception_ptr::exception_ptr*)((char*)&<unnamed> + offsetof(async_simple::Try<async_simple::Unit>,async_simple::Try<async_simple::Unit>::_value.std::variant<std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::<unnamed>.std::__detail::__variant::_Variant_base<std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::<unnamed>.std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::<unnamed>.std::__detail::__variant::_Copy_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::<unnamed>.std::__detail::__variant::_Move_ctor_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::<unnamed>.std::__detail::__variant::_Copy_ctor_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::<unnamed>.std::__detail::__variant::_Variant_storage<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::_M_u)).std::__exception_ptr::exception_ptr::_M_exception_object’ may be used uninitialized [-Werror=maybe-uninitialized]
  124 |       : _M_exception_object(__o._M_exception_object)
      |                             ~~~~^~~~~~~~~~~~~~~~~~~
/home/ruby/build/async_simple/async_simple/Promise.h: In member function ‘void std::_Sp_counted_ptr_inplace<_Tp, _Alloc, _Lp>::_M_dispose() [with _Tp = async_simple::uthread::collectAll<async_simple::uthread::Launch::Current, __gnu_cxx::__normal_iterator<std::function<void()>*, std::vector<std::function<void()> > > >(__gnu_cxx::__normal_iterator<std::function<void()>*, std::vector<std::function<void()> > >, __gnu_cxx::__normal_iterator<std::function<void()>*, std::vector<std::function<void()> > >, async_simple::Executor*)::Context; _Alloc = std::allocator<void>; __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]’:
/home/ruby/build/async_simple/async_simple/Promise.h:112:33: note: ‘<anonymous>’ declared here
  112 |         _sharedState->setResult(Try<value_type>(Unit()));
      |                                 ^~~~~~~~~~~~~~~~~~~~~~~
In constructor ‘std::__exception_ptr::exception_ptr::exception_ptr(std::__exception_ptr::exception_ptr&&)’,
    inlined from ‘std::__exception_ptr::exception_ptr& std::__exception_ptr::exception_ptr::operator=(std::__exception_ptr::exception_ptr&&)’ at /usr/include/c++/13/bits/exception_ptr.h:142:9,
    inlined from ‘std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::operator=(std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&&)::<lambda(auto:23&&, auto:24)> mutable [with auto:23 = std::__exception_ptr::exception_ptr&; auto:24 = std::integral_constant<long unsigned int, 2>]’ at /usr/include/c++/13/variant:697:34,
    inlined from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = void; _Fn = __detail::__variant::_Move_assign_base<false, monostate, async_simple::Unit, __exception_ptr::exception_ptr>::operator=(std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&&)::<lambda(auto:23&&, auto:24)>; _Args = {__exception_ptr::exception_ptr&, integral_constant<long unsigned int, 2>}]’ at /usr/include/c++/13/bits/invoke.h:61:36,
    inlined from ‘constexpr typename std::__invoke_result<_Functor, _ArgTypes>::type std::__invoke(_Callable&&, _Args&& ...) [with _Callable = __detail::__variant::_Move_assign_base<false, monostate, async_simple::Unit, __exception_ptr::exception_ptr>::operator=(std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&&)::<lambda(auto:23&&, auto:24)>; _Args = {__exception_ptr::exception_ptr&, integral_constant<long unsigned int, 2>}]’ at /usr/include/c++/13/bits/invoke.h:96:40,
    inlined from ‘static constexpr decltype(auto) std::__detail::__variant::__gen_vtable_impl<std::__detail::__variant::_Multi_array<_Result_type (*)(_Visitor, _Variants ...)>, std::integer_sequence<long unsigned int, __indices ...> >::__visit_invoke(_Visitor&&, _Variants ...) [with _Result_type = std::__detail::__variant::__variant_idx_cookie; _Visitor = std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::operator=(std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&&)::<lambda(auto:23&&, auto:24)>&&; _Variants = {std::variant<std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&}; long unsigned int ...__indices = {2}]’ at /usr/include/c++/13/variant:1021:17,
    inlined from ‘constexpr decltype(auto) std::__do_visit(_Visitor&&, _Variants&& ...) [with _Result_type = __detail::__variant::__variant_idx_cookie; _Visitor = __detail::__variant::_Move_assign_base<false, monostate, async_simple::Unit, __exception_ptr::exception_ptr>::operator=(std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&&)::<lambda(auto:23&&, auto:24)>; _Variants = {variant<monostate, async_simple::Unit, __exception_ptr::exception_ptr>&}]’ at /usr/include/c++/13/variant:1793:5,
    inlined from ‘constexpr decltype(auto) std::__do_visit(_Visitor&&, _Variants&& ...) [with _Result_type = __detail::__variant::__variant_idx_cookie; _Visitor = __detail::__variant::_Move_assign_base<false, monostate, async_simple::Unit, __exception_ptr::exception_ptr>::operator=(std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&&)::<lambda(auto:23&&, auto:24)>; _Variants = {variant<monostate, async_simple::Unit, __exception_ptr::exception_ptr>&}]’ at /usr/include/c++/13/variant:1732:5,
    inlined from ‘constexpr void std::__detail::__variant::__raw_idx_visit(_Visitor&&, _Variants&& ...) [with _Visitor = _Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::operator=(std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&&)::<lambda(auto:23&&, auto:24)>; _Variants = {std::variant<std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&}]’ at /usr/include/c++/13/variant:183:44,
    inlined from ‘constexpr std::__detail::__variant::_Move_assign_base<<anonymous>, _Types>& std::__detail::__variant::_Move_assign_base<<anonymous>, _Types>::operator=(std::__detail::__variant::_Move_assign_base<<anonymous>, _Types>&&) [with bool <anonymous> = false; _Types = {std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr}]’ at /usr/include/c++/13/variant:690:28,
    inlined from ‘constexpr std::__detail::__variant::_Variant_base<_Types>& std::__detail::__variant::_Variant_base<_Types>::operator=(std::__detail::__variant::_Variant_base<_Types>&&) [with _Types = {std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr}]’ at /usr/include/c++/13/variant:751:22,
    inlined from ‘constexpr std::variant<_Types>& std::variant<_Types>::operator=(std::variant<_Types>&&) [with _Types = {std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr}]’ at /usr/include/c++/13/variant:1407:16,
    inlined from ‘constexpr async_simple::Try<T>& async_simple::Try<T>::operator=(async_simple::Try<T>&&) [with T = async_simple::Unit]’ at /home/ruby/build/async_simple/async_simple/Try.h:61:10,
    inlined from ‘void async_simple::FutureState<T>::setResult(async_simple::Try<T>&&) [with T = async_simple::Unit]’ at /home/ruby/build/async_simple/async_simple/FutureState.h:203:20,
    inlined from ‘void async_simple::Promise<T>::setValue() requires  is_void_v<T> [with T = void]’ at /home/ruby/build/async_simple/async_simple/Promise.h:112:32,
    inlined from ‘async_simple::uthread::collectAll(Iterator, Iterator, async_simple::Executor*)::Context::~Context() [with async_simple::uthread::Launch Policy = async_simple::uthread::Launch::Schedule; Iterator = __gnu_cxx::__normal_iterator<std::function<void()>*, std::vector<std::function<void()> > >]’ at /home/ruby/build/async_simple/async_simple/uthread/Collect.h:87:33,
    inlined from ‘constexpr void std::destroy_at(_Tp*) [with _Tp = async_simple::uthread::collectAll<async_simple::uthread::Launch::Schedule, __gnu_cxx::__normal_iterator<std::function<void()>*, std::vector<std::function<void()> > > >(__gnu_cxx::__normal_iterator<std::function<void()>*, std::vector<std::function<void()> > >, __gnu_cxx::__normal_iterator<std::function<void()>*, std::vector<std::function<void()> > >, async_simple::Executor*)::Context]’ at /usr/include/c++/13/bits/stl_construct.h:88:18,
    inlined from ‘constexpr void std::_Destroy(_Tp*) [with _Tp = async_simple::uthread::collectAll<async_simple::uthread::Launch::Schedule, __gnu_cxx::__normal_iterator<std::function<void()>*, std::vector<std::function<void()> > > >(__gnu_cxx::__normal_iterator<std::function<void()>*, std::vector<std::function<void()> > >, __gnu_cxx::__normal_iterator<std::function<void()>*, std::vector<std::function<void()> > >, async_simple::Executor*)::Context]’ at /usr/include/c++/13/bits/stl_construct.h:149:22,
    inlined from ‘static constexpr void std::allocator_traits<std::allocator<void> >::destroy(allocator_type&, _Up*) [with _Up = async_simple::uthread::collectAll<async_simple::uthread::Launch::Schedule, __gnu_cxx::__normal_iterator<std::function<void()>*, std::vector<std::function<void()> > > >(__gnu_cxx::__normal_iterator<std::function<void()>*, std::vector<std::function<void()> > >, __gnu_cxx::__normal_iterator<std::function<void()>*, std::vector<std::function<void()> > >, async_simple::Executor*)::Context]’ at /usr/include/c++/13/bits/alloc_traits.h:674:17,
    inlined from ‘void std::_Sp_counted_ptr_inplace<_Tp, _Alloc, _Lp>::_M_dispose() [with _Tp = async_simple::uthread::collectAll<async_simple::uthread::Launch::Schedule, __gnu_cxx::__normal_iterator<std::function<void()>*, std::vector<std::function<void()> > > >(__gnu_cxx::__normal_iterator<std::function<void()>*, std::vector<std::function<void()> > >, __gnu_cxx::__normal_iterator<std::function<void()>*, std::vector<std::function<void()> > >, async_simple::Executor*)::Context; _Alloc = std::allocator<void>; __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]’ at /usr/include/c++/13/bits/shared_ptr_base.h:613:35:
/usr/include/c++/13/bits/exception_ptr.h:124:33: error: ‘*(std::__exception_ptr::exception_ptr*)((char*)&<unnamed> + offsetof(async_simple::Try<async_simple::Unit>,async_simple::Try<async_simple::Unit>::_value.std::variant<std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::<unnamed>.std::__detail::__variant::_Variant_base<std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::<unnamed>.std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::<unnamed>.std::__detail::__variant::_Copy_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::<unnamed>.std::__detail::__variant::_Move_ctor_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::<unnamed>.std::__detail::__variant::_Copy_ctor_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::<unnamed>.std::__detail::__variant::_Variant_storage<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::_M_u)).std::__exception_ptr::exception_ptr::_M_exception_object’ may be used uninitialized [-Werror=maybe-uninitialized]
  124 |       : _M_exception_object(__o._M_exception_object)
      |                             ~~~~^~~~~~~~~~~~~~~~~~~
/home/ruby/build/async_simple/async_simple/Promise.h: In member function ‘void std::_Sp_counted_ptr_inplace<_Tp, _Alloc, _Lp>::_M_dispose() [with _Tp = async_simple::uthread::collectAll<async_simple::uthread::Launch::Schedule, __gnu_cxx::__normal_iterator<std::function<void()>*, std::vector<std::function<void()> > > >(__gnu_cxx::__normal_iterator<std::function<void()>*, std::vector<std::function<void()> > >, __gnu_cxx::__normal_iterator<std::function<void()>*, std::vector<std::function<void()> > >, async_simple::Executor*)::Context; _Alloc = std::allocator<void>; __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]’:
/home/ruby/build/async_simple/async_simple/Promise.h:112:33: note: ‘<anonymous>’ declared here
  112 |         _sharedState->setResult(Try<value_type>(Unit()));
      |                                 ^~~~~~~~~~~~~~~~~~~~~~~
At global scope:
cc1plus: note: unrecognized command-line option ‘-Wno-deprecated-register’ may have been intended to silence earlier diagnostics
cc1plus: all warnings being treated as errors
gmake[2]: *** [async_simple/uthread/test/CMakeFiles/async_simple_uthread_test.dir/build.make:76: async_simple/uthread/test/CMakeFiles/async_simple_uthread_test.dir/UthreadTest.cpp.o] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:403: async_simple/uthread/test/CMakeFiles/async_simple_uthread_test.dir/all] Error 2
In file included from /usr/include/c++/13/exception:164,
                 from /home/ruby/build/async_simple/async_simple/test/FutureTest.cpp:16:
In constructor ‘std::__exception_ptr::exception_ptr::exception_ptr(std::__exception_ptr::exception_ptr&&)’,
    inlined from ‘std::__exception_ptr::exception_ptr& std::__exception_ptr::exception_ptr::operator=(std::__exception_ptr::exception_ptr&&)’ at /usr/include/c++/13/bits/exception_ptr.h:142:9,
    inlined from ‘std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::operator=(std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&&)::<lambda(auto:24&&, auto:25)> mutable [with auto:24 = std::__exception_ptr::exception_ptr&; auto:25 = std::integral_constant<long unsigned int, 2>]’ at /usr/include/c++/13/variant:697:34,
    inlined from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = void; _Fn = __detail::__variant::_Move_assign_base<false, monostate, async_simple::Unit, __exception_ptr::exception_ptr>::operator=(std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&&)::<lambda(auto:24&&, auto:25)>; _Args = {__exception_ptr::exception_ptr&, integral_constant<long unsigned int, 2>}]’ at /usr/include/c++/13/bits/invoke.h:61:36,
    inlined from ‘constexpr typename std::__invoke_result<_Functor, _ArgTypes>::type std::__invoke(_Callable&&, _Args&& ...) [with _Callable = __detail::__variant::_Move_assign_base<false, monostate, async_simple::Unit, __exception_ptr::exception_ptr>::operator=(std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&&)::<lambda(auto:24&&, auto:25)>; _Args = {__exception_ptr::exception_ptr&, integral_constant<long unsigned int, 2>}]’ at /usr/include/c++/13/bits/invoke.h:96:40,
    inlined from ‘static constexpr decltype(auto) std::__detail::__variant::__gen_vtable_impl<std::__detail::__variant::_Multi_array<_Result_type (*)(_Visitor, _Variants ...)>, std::integer_sequence<long unsigned int, __indices ...> >::__visit_invoke(_Visitor&&, _Variants ...) [with _Result_type = std::__detail::__variant::__variant_idx_cookie; _Visitor = std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::operator=(std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&&)::<lambda(auto:24&&, auto:25)>&&; _Variants = {std::variant<std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&}; long unsigned int ...__indices = {2}]’ at /usr/include/c++/13/variant:1021:17,
    inlined from ‘constexpr decltype(auto) std::__do_visit(_Visitor&&, _Variants&& ...) [with _Result_type = __detail::__variant::__variant_idx_cookie; _Visitor = __detail::__variant::_Move_assign_base<false, monostate, async_simple::Unit, __exception_ptr::exception_ptr>::operator=(std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&&)::<lambda(auto:24&&, auto:25)>; _Variants = {variant<monostate, async_simple::Unit, __exception_ptr::exception_ptr>&}]’ at /usr/include/c++/13/variant:1793:5,
    inlined from ‘constexpr decltype(auto) std::__do_visit(_Visitor&&, _Variants&& ...) [with _Result_type = __detail::__variant::__variant_idx_cookie; _Visitor = __detail::__variant::_Move_assign_base<false, monostate, async_simple::Unit, __exception_ptr::exception_ptr>::operator=(std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&&)::<lambda(auto:24&&, auto:25)>; _Variants = {variant<monostate, async_simple::Unit, __exception_ptr::exception_ptr>&}]’ at /usr/include/c++/13/variant:1732:5,
    inlined from ‘constexpr void std::__detail::__variant::__raw_idx_visit(_Visitor&&, _Variants&& ...) [with _Visitor = _Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::operator=(std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&&)::<lambda(auto:24&&, auto:25)>; _Variants = {std::variant<std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>&}]’ at /usr/include/c++/13/variant:183:44,
    inlined from ‘constexpr std::__detail::__variant::_Move_assign_base<<anonymous>, _Types>& std::__detail::__variant::_Move_assign_base<<anonymous>, _Types>::operator=(std::__detail::__variant::_Move_assign_base<<anonymous>, _Types>&&) [with bool <anonymous> = false; _Types = {std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr}]’ at /usr/include/c++/13/variant:690:28,
    inlined from ‘constexpr std::__detail::__variant::_Variant_base<_Types>& std::__detail::__variant::_Variant_base<_Types>::operator=(std::__detail::__variant::_Variant_base<_Types>&&) [with _Types = {std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr}]’ at /usr/include/c++/13/variant:751:22,
    inlined from ‘constexpr std::variant<_Types>& std::variant<_Types>::operator=(std::variant<_Types>&&) [with _Types = {std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr}]’ at /usr/include/c++/13/variant:1407:16,
    inlined from ‘constexpr async_simple::Try<T>& async_simple::Try<T>::operator=(async_simple::Try<T>&&) [with T = async_simple::Unit]’ at /home/ruby/build/async_simple/async_simple/Try.h:61:10,
    inlined from ‘void async_simple::FutureState<T>::setResult(async_simple::Try<T>&&) [with T = async_simple::Unit]’ at /home/ruby/build/async_simple/async_simple/FutureState.h:203:20,
    inlined from ‘void async_simple::Promise<T>::setValue() requires  is_void_v<T> [with T = void]’ at /home/ruby/build/async_simple/async_simple/Promise.h:112:32,
    inlined from ‘virtual void async_simple::FutureTest_testCollectAllVoid_Test::TestBody()’ at /home/ruby/build/async_simple/async_simple/test/FutureTest.cpp:452:28:
/usr/include/c++/13/bits/exception_ptr.h:124:33: error: ‘*(std::__exception_ptr::exception_ptr*)((char*)&<unnamed> + offsetof(async_simple::Try<async_simple::Unit>,async_simple::Try<async_simple::Unit>::_value.std::variant<std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::<unnamed>.std::__detail::__variant::_Variant_base<std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::<unnamed>.std::__detail::__variant::_Move_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::<unnamed>.std::__detail::__variant::_Copy_assign_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::<unnamed>.std::__detail::__variant::_Move_ctor_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::<unnamed>.std::__detail::__variant::_Copy_ctor_base<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::<unnamed>.std::__detail::__variant::_Variant_storage<false, std::monostate, async_simple::Unit, std::__exception_ptr::exception_ptr>::_M_u)).std::__exception_ptr::exception_ptr::_M_exception_object’ may be used uninitialized [-Werror=maybe-uninitialized]
  124 |       : _M_exception_object(__o._M_exception_object)
      |                             ~~~~^~~~~~~~~~~~~~~~~~~
In file included from /home/ruby/build/async_simple/async_simple/Future.h:23,
                 from /home/ruby/build/async_simple/async_simple/Collect.h:23,
                 from /home/ruby/build/async_simple/async_simple/test/FutureTest.cpp:28:
/home/ruby/build/async_simple/async_simple/Promise.h: In member function ‘virtual void async_simple::FutureTest_testCollectAllVoid_Test::TestBody()’:
/home/ruby/build/async_simple/async_simple/Promise.h:112:33: note: ‘<anonymous>’ declared here
  112 |         _sharedState->setResult(Try<value_type>(Unit()));
      |                                 ^~~~~~~~~~~~~~~~~~~~~~~
At global scope:
cc1plus: note: unrecognized command-line option ‘-Wno-deprecated-register’ may have been intended to silence earlier diagnostics
cc1plus: all warnings being treated as errors
gmake[2]: *** [async_simple/test/CMakeFiles/async_simple_test.dir/build.make:90: async_simple/test/CMakeFiles/async_simple_test.dir/FutureTest.cpp.o] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:299: async_simple/test/CMakeFiles/async_simple_test.dir/all] Error 2
gmake: *** [Makefile:146: all] Error 2

Screenshot_20230413_145625
Can you try again with the above modification?

@4kangjc Thanks for your quick reply. After modifying the two files as you suggested, it was built successfully.

detailed log:

❯ cmake --build build/ -j6
[  2%] Building CXX object async_simple/CMakeFiles/async_simple.dir/uthread/internal/thread.cc.o
[  2%] Building CXX object async_simple/CMakeFiles/async_simple_static.dir/uthread/internal/thread.cc.o
[  8%] Built target block_echo_client
[  8%] Built target block_echo_server
[  9%] Linking CXX static library libasync_simple.a
[ 10%] Linking CXX shared library libasync_simple.so
[ 16%] Built target async_simple_static
[ 21%] Built target async_simple
[ 22%] Building CXX object demo_example/CMakeFiles/CountChar.dir/CountChar.cpp.o
[ 25%] Linking CXX executable async_simple_util_test
[ 25%] Linking CXX executable async_simple_executor_test
[ 27%] Building CXX object async_simple/uthread/test/CMakeFiles/async_simple_uthread_test.dir/UthreadTest.cpp.o
[ 29%] Building CXX object async_simple/coro/test/CMakeFiles/async_simple_coro_test.dir/ConditionVariableTest.cpp.o
[ 29%] Building CXX object async_simple/test/CMakeFiles/async_simple_test.dir/FutureStateTest.cpp.o
[ 32%] Built target async_simple_executor_test
[ 35%] Built target async_simple_util_test
[ 36%] Building CXX object async_simple/coro/test/CMakeFiles/async_simple_coro_test.dir/FutureAwaiterTest.cpp.o
[ 37%] Building CXX object demo_example/CMakeFiles/ReadFiles.dir/ReadFiles.cpp.o
[ 39%] Linking CXX executable CountChar
[ 39%] Built target CountChar
[ 40%] Building CXX object demo_example/CMakeFiles/async_echo_server.dir/async_echo_server.cpp.o
[ 41%] Building CXX object async_simple/coro/test/CMakeFiles/async_simple_coro_test.dir/GeneratorTest.cpp.o
[ 43%] Building CXX object async_simple/test/CMakeFiles/async_simple_test.dir/FutureTest.cpp.o
[ 44%] Linking CXX executable ReadFiles
[ 44%] Built target ReadFiles
[ 45%] Building CXX object demo_example/CMakeFiles/async_echo_client.dir/async_echo_client.cpp.o
[ 47%] Building CXX object async_simple/coro/test/CMakeFiles/async_simple_coro_test.dir/LatchTest.cpp.o
[ 48%] Building CXX object async_simple/coro/test/CMakeFiles/async_simple_coro_test.dir/LazyTest.cpp.o
[ 50%] Linking CXX executable async_echo_server
[ 50%] Built target async_echo_server
[ 51%] Building CXX object demo_example/CMakeFiles/async_multiple_core_echo_server.dir/async_multiple_core_echo_server.cpp.o
[ 52%] Building CXX object async_simple/coro/test/CMakeFiles/async_simple_coro_test.dir/MutexTest.cpp.o
[ 54%] Linking CXX executable async_echo_client
[ 54%] Built target async_echo_client
[ 55%] Building CXX object demo_example/CMakeFiles/http_server.dir/http/coroutine_http/http_server.cpp.o
[ 56%] Building CXX object async_simple/coro/test/CMakeFiles/async_simple_coro_test.dir/SemaphoreTest.cpp.o
[ 58%] Linking CXX executable async_simple_uthread_test
[ 59%] Built target async_simple_uthread_test
[ 60%] Building CXX object demo_example/CMakeFiles/multiple_core_http_server.dir/http/coroutine_http/multiple_core_http_server.cpp.o
[ 62%] Linking CXX executable async_multiple_core_echo_server
[ 62%] Built target async_multiple_core_echo_server
[ 63%] Building CXX object demo_example/CMakeFiles/http_client.dir/http/coroutine_http/http_client.cpp.o
[ 64%] Building CXX object async_simple/coro/test/CMakeFiles/async_simple_coro_test.dir/SleepTest.cpp.o
[ 66%] Linking CXX executable async_simple_test
[ 68%] Built target async_simple_test
[ 70%] Building CXX object demo_example/CMakeFiles/block_http_server.dir/http/block_http/block_http_server.cpp.o
[ 71%] Linking CXX executable http_server
[ 71%] Built target http_server
[ 72%] Building CXX object demo_example/CMakeFiles/smtp_client.dir/smtp/smtp_client.cpp.o
[ 74%] Building CXX object async_simple/coro/test/CMakeFiles/async_simple_coro_test.dir/SpinLockTest.cpp.o
[ 75%] Linking CXX executable multiple_core_http_server
[ 75%] Built target multiple_core_http_server
[ 77%] Building CXX object async_simple/coro/test/CMakeFiles/async_simple_coro_test.dir/TraitsTest.cpp.o
[ 78%] Linking CXX executable http_client
[ 78%] Built target http_client
[ 79%] Building CXX object benchmarks/CMakeFiles/benchmarking.dir/benchmark_main.cpp.o
[ 81%] Linking CXX executable block_http_server
[ 81%] Built target block_http_server
[ 82%] Building CXX object benchmarks/CMakeFiles/benchmarking.dir/PureSwitch.bench.cpp.o
[ 83%] Building CXX object async_simple/coro/test/CMakeFiles/async_simple_coro_test.dir/ViaCoroutineTest.cpp.o
[ 85%] Building CXX object async_simple/coro/test/CMakeFiles/async_simple_coro_test.dir/__/__/test/dotest.cpp.o
[ 86%] Building CXX object benchmarks/CMakeFiles/benchmarking.dir/ReadFile.bench.cpp.o
[ 87%] Linking CXX executable smtp_client
[ 87%] Built target smtp_client
[ 89%] Building CXX object benchmarks/CMakeFiles/benchmarking.dir/CallDepth.bench.cpp.o
[ 90%] Building CXX object benchmarks/CMakeFiles/benchmarking.dir/Lazy.bench.cpp.o
[ 91%] Building CXX object benchmarks/CMakeFiles/benchmarking.dir/Future.bench.cpp.o
[ 93%] Building CXX object benchmarks/CMakeFiles/benchmarking.dir/ThreadPool.bench.cpp.o
[ 94%] Building CXX object benchmarks/CMakeFiles/benchmarking.dir/Mutex.bench.cpp.o
[ 95%] Building CXX object benchmarks/CMakeFiles/benchmarking.dir/SpinLock.bench.cpp.o
[ 97%] Building CXX object benchmarks/CMakeFiles/benchmarking.dir/Uthread.bench.cpp.o
[ 98%] Linking CXX executable async_simple_coro_test
[ 98%] Built target async_simple_coro_test
[100%] Linking CXX executable benchmarking
[100%] Built target benchmarking

ruby in 🌐 fedora in async_simple on  main [!] is 📦 v1.0.0 via △ v3.26.2 via 🌙 v5.4.4 via  v19.8.1 via 🐍 v3.11.2 took 1m12s 
❯ git diff async_simple/coro/Lazy.h 
diff --git a/async_simple/coro/Lazy.h b/async_simple/coro/Lazy.h
index 976e985..0b05b13 100644
--- a/async_simple/coro/Lazy.h
+++ b/async_simple/coro/Lazy.h
@@ -236,7 +236,7 @@ struct LazyAwaiterBase {
     }
 
     Try<T> awaitResumeTry() noexcept {
-        Try<T> ret = std::move(_handle.promise().tryResult());
+        Try<T> ret = _handle.promise().tryResult();
         _handle.destroy();
         _handle = nullptr;
         return ret;

ruby in 🌐 fedora in async_simple on  main [!] is 📦 v1.0.0 via △ v3.26.2 via 🌙 v5.4.4 via  v19.8.1 via 🐍 v3.11.2 
❯ git diff async_simple/FutureState.h 
diff --git a/async_simple/FutureState.h b/async_simple/FutureState.h
index 34f38b1..47b5c1f 100644
--- a/async_simple/FutureState.h
+++ b/async_simple/FutureState.h
@@ -195,7 +195,7 @@ public:
     //  ONLY_RESULT: promise.setValue called
     //  ONLY_CONTINUATION: future.thenImpl called
     void setResult(Try<T>&& value) {
-#if __GNUC__ != 12
+#if __GNUC__ < 12
         // GCC 12 issues a spurious uninitialized-var warning.
         // See details: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109448
         logicAssert(!hasResult(), "FutureState already has a result");