diff --git a/optional.hpp b/optional.hpp index 902d6fe..9629d9b 100644 --- a/optional.hpp +++ b/optional.hpp @@ -1595,7 +1595,7 @@ template (f), *std::forward(opt)) - : optional(nullopt); + : optional>(nullopt); } template ())), detail::enable_if_t::value> * = nullptr> -constexpr auto map_impl(Opt &&opt, F &&f) -> optional { +constexpr auto map_impl(Opt &&opt, F &&f) -> optional> { return opt.has_value() ? detail::invoke(std::forward(f), *std::forward(opt)) - : optional(nullopt); + : optional>(nullopt); } template o37 = tl::nullopt; auto o37r = std::move(o37).map([](int) { return; }); REQUIRE(!o37r); + + // callable which returns a reference + tl::optional o38 = 42; + auto o38r = o38.map([](int& i) -> const int& { return i; }); + REQUIRE(o38r); + REQUIRE(*o38r == 42); } SECTION("map constexpr") {