forked from TartanLlama/expected
Fix #34
This commit is contained in:
@ -80,3 +80,14 @@ TEST_CASE("Issue 33", "[issues.33]") {
|
||||
res = res.map_error([](int i) { return 42; });
|
||||
REQUIRE(res.error() == 42);
|
||||
}
|
||||
|
||||
|
||||
tl::expected<void, std::string> voidWork() { return {}; }
|
||||
tl::expected<int, std::string> work2() { return 42; }
|
||||
void errorhandling(std::string){}
|
||||
|
||||
TEST_CASE("Issue 34", "[issues.34]") {
|
||||
tl::expected <int, std::string> result = voidWork ()
|
||||
.and_then (work2);
|
||||
result.map_error ([&] (std::string result) {errorhandling (result);});
|
||||
}
|
||||
|
@ -1893,9 +1893,9 @@ template <class Exp, class Ret> using ret_t = expected<Ret, err_t<Exp>>;
|
||||
|
||||
#ifdef TL_EXPECTED_CXX14
|
||||
template <class Exp, class F,
|
||||
detail::enable_if_t<!std::is_void<exp_t<Exp>>::value> * = nullptr,
|
||||
class Ret = decltype(detail::invoke(std::declval<F>(),
|
||||
*std::declval<Exp>())),
|
||||
detail::enable_if_t<!std::is_void<exp_t<Exp>>::value> * = nullptr>
|
||||
*std::declval<Exp>()))>
|
||||
constexpr auto and_then_impl(Exp &&exp, F &&f) {
|
||||
static_assert(detail::is_expected<Ret>::value, "F must return an expected");
|
||||
|
||||
@ -1905,9 +1905,8 @@ constexpr auto and_then_impl(Exp &&exp, F &&f) {
|
||||
}
|
||||
|
||||
template <class Exp, class F,
|
||||
class Ret = decltype(detail::invoke(std::declval<F>(),
|
||||
*std::declval<Exp>())),
|
||||
detail::enable_if_t<std::is_void<exp_t<Exp>>::value> * = nullptr>
|
||||
detail::enable_if_t<std::is_void<exp_t<Exp>>::value> * = nullptr,
|
||||
class Ret = decltype(detail::invoke(std::declval<F>()))>
|
||||
constexpr auto and_then_impl(Exp &&exp, F &&f) {
|
||||
static_assert(detail::is_expected<Ret>::value, "F must return an expected");
|
||||
|
||||
@ -1929,8 +1928,7 @@ auto and_then_impl(Exp &&exp, F &&f) -> Ret {
|
||||
}
|
||||
|
||||
template <class Exp, class F,
|
||||
class Ret = decltype(detail::invoke(std::declval<F>(),
|
||||
*std::declval<Exp>())),
|
||||
class Ret = decltype(detail::invoke(std::declval<F>())),
|
||||
detail::enable_if_t<std::is_void<exp_t<Exp>>::value> * = nullptr>
|
||||
constexpr auto and_then_impl(Exp &&exp, F &&f) -> Ret {
|
||||
static_assert(detail::is_expected<Ret>::value, "F must return an expected");
|
||||
|
Reference in New Issue
Block a user