This commit is contained in:
Simon Brand
2018-03-01 15:05:15 +00:00
parent 2ff689cfe4
commit ed0c4eb48a
2 changed files with 20 additions and 4 deletions

View File

@@ -367,3 +367,19 @@ TEST_CASE("And then extensions", "[extensions.and_then]") {
REQUIRE(ret.error() == 21);
}
}
struct S {
int x;
};
struct F {
int x;
};
TEST_CASE("14", "[issue.14]") {
auto res = tl::expected<S,F>{tl::unexpect, F{}};
res.map_error([](F f) {
});
}

View File

@@ -1871,7 +1871,7 @@ auto map_impl(Exp &&exp, F &&f) -> expected<void, err_t<Exp>> {
!defined(TL_EXPECTED_GCC54)
template <class Exp, class F,
class Ret = decltype(detail::invoke(std::declval<F>(),
*std::declval<Exp>())),
std::declval<Exp>().error())),
detail::enable_if_t<!std::is_void<Ret>::value> * = nullptr>
constexpr auto map_error_impl(Exp &&exp, F &&f) {
using result = expected<exp_t<Exp>, detail::decay_t<Ret>>;
@@ -1882,7 +1882,7 @@ constexpr auto map_error_impl(Exp &&exp, F &&f) {
}
template <class Exp, class F,
class Ret = decltype(detail::invoke(std::declval<F>(),
*std::declval<Exp>())),
std::declval<Exp>().error())),
detail::enable_if_t<std::is_void<Ret>::value> * = nullptr>
auto map_error_impl(Exp &&exp, F &&f) {
using result = expected<exp_t<Exp>, monostate>;
@@ -1896,7 +1896,7 @@ auto map_error_impl(Exp &&exp, F &&f) {
#else
template <class Exp, class F,
class Ret = decltype(detail::invoke(std::declval<F>(),
*std::declval<Exp>())),
std::declval<Exp>().error())),
detail::enable_if_t<!std::is_void<Ret>::value> * = nullptr>
constexpr auto map_error_impl(Exp &&exp, F &&f)
-> expected<exp_t<Exp>, detail::decay_t<Ret>> {
@@ -1910,7 +1910,7 @@ constexpr auto map_error_impl(Exp &&exp, F &&f)
template <class Exp, class F,
class Ret = decltype(detail::invoke(std::declval<F>(),
*std::declval<Exp>())),
std::declval<Exp>().error())),
detail::enable_if_t<std::is_void<Ret>::value> * = nullptr>
auto map_error_impl(Exp &&exp, F &&f) -> expected<exp_t<Exp>, monostate> {
using result = expected<exp_t<Exp>, monostate>;