Skip to content

Commit

Permalink
Support void for mitama::result
Browse files Browse the repository at this point in the history
  • Loading branch information
ken-matsui committed Dec 5, 2020
1 parent 2036920 commit e92f2a8
Show file tree
Hide file tree
Showing 3 changed files with 470 additions and 6 deletions.
12 changes: 10 additions & 2 deletions include/mitama/result/detail/fwd.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,14 @@ constexpr mutability operator&&(mutability _1, mutability _2) {
template < mutability Mut >
inline constexpr bool is_mut_v = !static_cast<bool>(Mut);

template <class T>
struct void_to_monostate {
using type = std::conditional_t<std::is_void_v<T>, std::monostate, T>;
};

template <class T>
using void_to_monostate_t = typename void_to_monostate<T>::type;

template <mutability,
class = std::monostate, // success type
class = std::monostate, // failure type
Expand All @@ -31,11 +39,11 @@ class basic_result;

/// alias template for immutable result
template <class T = std::monostate, class E = std::monostate>
using result = basic_result<mutability::immut, T, E>;
using result = basic_result<mutability::immut, void_to_monostate_t<T>, void_to_monostate_t<E>>;

/// alias template for mutable result
template <class T = std::monostate, class E = std::monostate>
using mut_result = basic_result<mutability::mut, T, E>;
using mut_result = basic_result<mutability::mut, void_to_monostate_t<T>, void_to_monostate_t<E>>;

template <class = std::monostate, class...> class success_t;
template <class T> success_t(T&&) -> success_t<T>;
Expand Down

0 comments on commit e92f2a8

Please sign in to comment.