diff --git a/include/continuable/continuable-base.hpp b/include/continuable/continuable-base.hpp index f0bcd10..2be625b 100644 --- a/include/continuable/continuable-base.hpp +++ b/include/continuable/continuable-base.hpp @@ -849,7 +849,7 @@ constexpr auto make_continuable(Continuation&& continuation) { return detail::base::attorney::create_from( std::forward(continuation), - detail::hints::extract(detail::traits::identity{}), + detail::hints::from_explicit(detail::traits::identity{}), detail::util::ownership{}); } @@ -864,41 +864,22 @@ constexpr auto make_continuable(Continuation&& continuation) { /// /// \since 3.0.0 template -constexpr auto make_ready_continuable() { - return make_continuable([](auto&& promise) { - std::forward(promise).set_value(); - }); +auto make_ready_continuable() { + static_assert( + sizeof...(Args) == 0, + "make_ready_continuable with void continuables requires zero args!"); + return make_continuable(detail::base::ready_continuable<>()); } /// Returns a continuable_base with one result value which instantly resolves /// the promise with the given value. /// /// \copydetails make_ready_continuable() -template -constexpr auto make_ready_continuable(Result&& result) { - return make_continuable>( // ... - [result = std::forward(result)](auto&& promise) mutable { - std::forward(promise).set_value(std::move(result)); - }); -} - -/// Returns a continuable_base with multiple result values which instantly -/// resolves the promise with the given values. -/// -/// \copydetails make_ready_continuable() -template -constexpr auto make_ready_continuable(FirstResult&& first_result, - SecondResult&& second_result, - Rest&&... rest) { - return make_continuable, std::decay_t, - std::decay_t...>( // ... - [result = std::make_tuple(std::forward(first_result), - std::forward(second_result), - std::forward(rest)...)]( - auto&& promise) mutable { - detail::traits::unpack(std::forward(promise), - std::move(result)); - }); +template +auto make_ready_continuable(Args&&... args) { + return make_continuable...>( + detail::base::ready_continuable...>( + std::forward(args))); } /// Returns a continuable_base with the parameterized result which instantly diff --git a/include/continuable/continuable-trait.hpp b/include/continuable/continuable-trait.hpp index 122d40e..cbf40a0 100644 --- a/include/continuable/continuable-trait.hpp +++ b/include/continuable/continuable-trait.hpp @@ -32,8 +32,8 @@ #define CONTINUABLE_TRAIT_HPP_INCLUDED #include -#include #include +#include #include #include #include @@ -61,18 +61,17 @@ template