diff --git a/include/continuable/detail/composition.hpp b/include/continuable/detail/composition.hpp index 53dc4b6..6745fb5 100644 --- a/include/continuable/detail/composition.hpp +++ b/include/continuable/detail/composition.hpp @@ -38,8 +38,8 @@ #include #include -#include #include +#include #include #include #include @@ -431,7 +431,7 @@ template auto finalize_composition( continuable_base&& continuation) { - auto ownership_ = base::attorney::ownership_of(continuation); + auto ownership = base::attorney::ownership_of(continuation); auto composition = base::attorney::consume_data(std::move(continuation)); @@ -458,7 +458,7 @@ auto finalize_composition( submitter->create_callback()); }); }, - signature, std::move(ownership_)); + signature, std::move(ownership)); } /// Connects the left and the right continuable to a sequence diff --git a/include/continuable/detail/expected.hpp b/include/continuable/detail/expected.hpp index 35d4716..514fb93 100644 --- a/include/continuable/detail/expected.hpp +++ b/include/continuable/detail/expected.hpp @@ -88,7 +88,7 @@ protected: } }; -template +template struct expected_base : expected_base_util { explicit expected_base(expected_base const& right) { right.visit([&](auto&& value) { @@ -102,6 +102,24 @@ struct expected_base : expected_base_util { this->init(std::forward(value)); }); set(right.consume()); + return *this; + } +}; +template +struct expected_base : expected_base_util { + explicit expected_base(expected_base const& right) { + right.visit([&](auto&& value) { + this->init(std::forward(value)); + }); + set(right.consume()); + } + expected_base& operator=(expected_base const& right) { + this->weak_destroy(); + right.visit([&](auto&& value) { + this->init(std::forward(value)); + }); + set(right.consume()); + return *this; } }; } // namespace detail