diff --git a/include/continuable/continuable-result.hpp b/include/continuable/continuable-result.hpp index 7c62dc0..ff146b9 100644 --- a/include/continuable/continuable-result.hpp +++ b/include/continuable/continuable-result.hpp @@ -209,6 +209,11 @@ private: detail::container::flat_variant variant_; }; +inline result<> make_result() { + result<> result; + result.set_value(); + return result; +} template auto make_result(T&&... values) { return result...>(std::forward(values)...); diff --git a/include/continuable/detail/utility/flat-variant.hpp b/include/continuable/detail/utility/flat-variant.hpp index 38a1ec4..54b09a3 100644 --- a/include/continuable/detail/utility/flat-variant.hpp +++ b/include/continuable/detail/utility/flat-variant.hpp @@ -361,7 +361,8 @@ private: detail::slot_t get_slot() const noexcept { // Check for invalid values especially for memory corruption, // the empty element is included. - assert(this->slot_ <= sizeof...(T)); + assert((this->slot_ < sizeof...(T)) || + (this->slot_ == detail::empty_slot::value)); return this->slot_; } bool is_slot(detail::slot_t const slot) const noexcept { diff --git a/include/continuable/detail/utility/result-trait.hpp b/include/continuable/detail/utility/result-trait.hpp index 9d7012b..2101315 100644 --- a/include/continuable/detail/utility/result-trait.hpp +++ b/include/continuable/detail/utility/result-trait.hpp @@ -55,7 +55,10 @@ struct result_trait<> { } template - static void visit(Result&& /*result*/, Mapper&& /*mapper*/) { + static auto visit(Result&& result, Mapper&& mapper) { + assert(result.is_value()); + (void)result; + return util::invoke(std::forward(mapper)); } }; template