28 constexpr parse_expected(std::nullopt_t)
noexcept _v{std::monostate{}} {}
30 template<
typename Arg = T>
31 constexpr explicit(not std::is_convertible_v<Arg, T>)
parse_expected(Arg&& arg) noexcept : _v{std::forward<Arg>(arg)}
35 template<
typename Arg>
36 constexpr explicit(not std::is_convertible_v<const Arg&, E>)
parse_expected(std::unexpected<Arg>
const& arg) noexcept :
43 _v.template emplace<0>();
47 template<
typename Arg = T>
50 _v.template emplace<1>(std::forward<Arg>(arg));
54 template<
typename Arg = E>
55 constexpr parse_expected &operator=(std::unexpected<Arg>
const &arg)
noexcept
57 _v.template emplace<2>(arg);
61 template<
typename Arg = E>
62 constexpr parse_expected &operator=(std::unexpected<Arg> &&arg)
noexcept
68 template<
typename... Args>
69 constexpr value_type &emplace(Args &&... args)
noexcept
71 return _v.template emplace<1>(std::forward<Args>(args)...);
74 [[nodiscard]]
constexpr bool has_value()
const noexcept
76 return _v.index() == 1;
79 constexpr explicit operator bool()
const noexcept
84 [[nodiscard]]
constexpr bool has_error()
const noexcept
86 return _v.index() == 2;
89 [[nodiscard]]
constexpr value_type
const&
operator*()
const noexcept
91 hi_axiom(_v.index() == 1);
92 return std::get<1>(_v);
95 [[nodiscard]]
constexpr value_type&
operator*()
noexcept
97 hi_axiom(_v.index() == 1);
98 return std::get<1>(_v);
101 [[nodiscard]]
constexpr value_type
const* operator->()
const noexcept
103 hi_axiom(_v.index() == 1);
107 [[nodiscard]]
constexpr value_type* operator->()
noexcept
109 hi_axiom(_v.index() == 1);
113 [[nodiscard]]
constexpr error_type
const& error()
const noexcept
115 hi_axiom(_v.index() == 2);
116 return std::get<2>(_v);
119 [[nodiscard]]
constexpr error_type& error()
noexcept
121 hi_axiom(_v.index() == 2);
122 return std::get<2>(_v);
126 std::variant<std::monostate, T, E> _v;
constexpr matrix2 operator*(matrix2 const &lhs, matrix2 const &rhs) noexcept
Matrix/Matrix multiplication.
Definition transform.hpp:69