30 constexpr expected_optional(std::nullopt_t) noexcept : _v{std::in_place_index<0>, std::monostate{}} {}
32 template<
typename Arg = T>
37 template<
typename Arg>
39 _v{std::in_place_index<2>, arg.error()}
45 _v.template emplace<0>();
49 template<
typename Arg = T>
56 template<
typename Arg = E>
59 _v.template emplace<2>(arg);
63 template<
typename Arg = E>
70 template<
typename... Args>
71 constexpr value_type &emplace(Args &&... args)
noexcept
76 [[nodiscard]]
constexpr bool has_value()
const noexcept
78 return _v.index() == 1;
81 constexpr explicit operator bool()
const noexcept
86 [[nodiscard]]
constexpr bool has_error()
const noexcept
88 return _v.index() == 2;
91 [[nodiscard]]
constexpr value_type
const&
operator*()
const noexcept
93 hi_axiom(_v.index() == 1);
94 return std::get<1>(_v);
97 [[nodiscard]]
constexpr value_type&
operator*()
noexcept
99 hi_axiom(_v.index() == 1);
100 return std::get<1>(_v);
103 [[nodiscard]]
constexpr value_type
const* operator->()
const noexcept
105 hi_axiom(_v.index() == 1);
109 [[nodiscard]]
constexpr value_type* operator->()
noexcept
111 hi_axiom(_v.index() == 1);
115 [[nodiscard]]
constexpr error_type
const& error()
const noexcept
117 hi_axiom(_v.index() == 2);
118 return std::get<2>(_v);
121 [[nodiscard]]
constexpr error_type& error()
noexcept
123 hi_axiom(_v.index() == 2);
124 return std::get<2>(_v);
128 std::variant<std::monostate, T, E> _v;
constexpr matrix2 operator*(matrix2 const &lhs, matrix2 const &rhs) noexcept
Matrix/Matrix multiplication.
Definition transform.hpp:69