Skip to content

Commit 4c452be

Browse files
AnyOf: simplify NonVoid
1 parent 8e8040b commit 4c452be

1 file changed

Lines changed: 6 additions & 14 deletions

File tree

src/include/crhandle/taskutils.hpp

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <array>
77
#include <optional>
88
#include <tuple>
9+
#include <variant>
910

1011
namespace cr {
1112

@@ -33,26 +34,17 @@ auto CreateArray(std::index_sequence<Is...>, T && tuple, F && transform)
3334
}
3435

3536
template <typename T>
36-
struct TypeConverter
37+
struct NonVoid
3738
{
3839
using Type = T;
3940
};
4041

4142
template <>
42-
struct TypeConverter<void>
43+
struct NonVoid<void>
4344
{
4445
using Type = std::monostate;
4546
};
4647

47-
template <typename T>
48-
struct NonVoid;
49-
50-
template <template <typename...> typename C, typename... Ts>
51-
struct NonVoid<C<Ts...>>
52-
{
53-
using Type = C<typename TypeConverter<Ts>::Type...>;
54-
};
55-
5648
} // namespace internal
5749

5850
template <typename T>
@@ -61,12 +53,12 @@ using NonVoid = typename internal::NonVoid<T>::Type;
6153
struct AnyOfFn
6254
{
6355
template <Executor E, TaskResult... Rs>
64-
using HandleType = TaskHandle<NonVoid<std::variant<Rs...>>, E>;
56+
using HandleType = TaskHandle<std::variant<NonVoid<Rs>...>, E>;
6557

6658
template <Executor E, TaskResult... Rs>
6759
HandleType<E, Rs...> operator()(TaskHandle<Rs, E>... ts) const
6860
{
69-
std::optional<NonVoid<std::variant<Rs...>>> ret;
61+
std::optional<std::variant<NonVoid<Rs>...>> ret;
7062
stdcr::coroutine_handle<> continuation = nullptr;
7163

7264
auto TaskWrapper = [&]<size_t I, typename R>(std::in_place_index_t<I> i,
@@ -76,7 +68,7 @@ struct AnyOfFn
7668

7769
if constexpr (std::is_same_v<R, void>) {
7870
co_await std::move(task);
79-
ret.emplace(i, internal::TypeConverter<void>::Type{});
71+
ret.emplace(i, NonVoid<void>{});
8072
} else {
8173
R tmp = co_await std::move(task);
8274
ret.emplace(i, std::move(tmp));

0 commit comments

Comments
 (0)