| 1088 | class Ret = decltype(invoke(declval<F>(), declval<Exp>().error())), |
| 1089 | enable_if_t<!is_void_v<Ret>> * = nullptr> |
| 1090 | constexpr auto expected_or_else_impl(Exp &&exp, F &&f) { |
| 1091 | static_assert(is_expected_v<Ret>, "F must return an expected"); |
| 1092 | if (exp.has_value()) { |
| 1093 | return std::forward<Exp>(exp); |
| 1094 | } |
| 1095 | return invoke(std::forward<F>(f), std::forward<Exp>(exp).error()); |
| 1096 | } |
| 1097 | |
| 1098 | template <class Exp, class F, |
| 1099 | class Ret = decltype(invoke(declval<F>(), declval<Exp>().error())), |