12 #include <coro/coro.hpp>
47 template <std::ranges::range Range>
49 using first_ref_t = std::ranges::range_value_t<Range>;
50 using raw_ret_t = decltype(std::declval<first_ref_t>().return_value());
51 using val_t = std::remove_cvref_t<raw_ret_t>;
53 if constexpr (std::is_void_v<val_t>) {
55 for (
auto&& r : task_results) {
59 std::vector<val_t> ret;
60 if constexpr (std::ranges::sized_range<Range>) {
61 ret.reserve(task_results.size());
63 for (
auto&& r : task_results) {
64 ret.emplace_back(r.return_value());
86 template <
typename... Args>
89 [](
auto&&... result) {
90 if constexpr ((std::is_void_v<std::remove_cvref_t<
91 decltype(std::declval<
92 std::remove_reference_t<decltype(result)>>()
96 (result.return_value(), ...);
98 return std::make_tuple(
99 std::forward<decltype(result)>(result).return_value()...
auto coro_results(Range &&task_results)
Collect the results of multiple finished coroutines.