@@ -261,7 +261,7 @@ class Result {
261261 * @tparam U Type convertible to T, and U not derived from ResultError
262262 * @param value Value to initialize the result with.
263263 */
264- template <traits::IsResultError U>
264+ template <typename U>
265265 requires std::convertible_to<T, U>
266266 constexpr Result (U&& value)
267267 : error(std::monostate()),
@@ -287,11 +287,11 @@ class Result {
287287 * @param self the self object
288288 * @return the error type, wrapped in std::optional
289289 */
290- template <typename Self, traits::IsResultError E>
290+ template <traits::IsResultError E, typename Self >
291291 requires traits::is_in_pack_v<E, Errs...>
292- constexpr auto && get_error(this Self&& self) {
292+ constexpr auto get_error (this Self&& self) {
293293 if (std::holds_alternative<E>(self.error )) {
294- return std::optional (std::holds_alternative <E>(std::forward<Self>(self).error ));
294+ return std::optional<E> (std::get <E>(std::forward<Self>(self).error ));
295295 } else {
296296 return std::optional<E>();
297297 }
@@ -373,7 +373,7 @@ class Result {
373373 && (traits::all_same_v<or_else_return_t <Self, F, Errs>...>)
374374 && (std::same_as<T, typename or_else_return_t <Self, F, Errs>::value_type> && ...)
375375 constexpr auto or_else (this Self&& self, F&& f) {
376- using ReturnType = or_else_return_t <Self, F, std::tuple_element_t <1 , std::tuple<Errs...>>>;
376+ using ReturnType = or_else_return_t <Self, F, std::tuple_element_t <0 , std::tuple<Errs...>>>;
377377 // if there isn't an error, return
378378 if (!self.has_error ()) {
379379 return ReturnType (std::forward<Self>(self).value );
@@ -543,7 +543,7 @@ class Result<void, Errs...> {
543543 && (traits::all_same_v<or_else_return_t <Self, F, Errs>...>)
544544 && (std::same_as<void , typename or_else_return_t <Self, F, Errs>::value_type> && ...)
545545 constexpr auto or_else (this Self&& self, F&& f) {
546- using ReturnType = or_else_return_t <Self, F, std::tuple_element_t <1 , std::tuple<Errs...>>>;
546+ using ReturnType = or_else_return_t <Self, F, std::tuple_element_t <0 , std::tuple<Errs...>>>;
547547 // if there isn't an error, return
548548 return ReturnType ();
549549 // otherwise, invoke the given lambda
0 commit comments