diff --git a/NextGen.cpp b/NextGen.cpp index a62f08c..730c5fa 100644 --- a/NextGen.cpp +++ b/NextGen.cpp @@ -115,7 +115,6 @@ auto appendHandlerToContinuation(Continuation&& cont, Handler&& handler) { #include #include #include -#include "Continuable.h" // Equivalent to C++17's std::void_t which is targets a bug in GCC, // that prevents correct SFINAE behavior. @@ -270,7 +269,7 @@ struct CallbackResultDecorator { template struct CallbackResultDecorator>{ template - static auto decorate(Callback&& callback) { + static auto decorate(Callback&& callback) -> std::decay_t { return std::forward(callback); } }; @@ -491,7 +490,7 @@ auto thenImpl(Data data, Callback&& callback) { } template -auto postImpl(Data data ,NewDispatcher&& newDispatcher) { +auto postImpl(Data data, NewDispatcher&& newDispatcher) { using Decoration = DefaultDecoration> @@ -562,25 +561,15 @@ public: }*/ template - auto operator&& (ContinuableBase&& right)&& { + auto operator&& (ContinuableBase right)&& { return combineImpl(std::move(decoration), std::move(right.decoration)); } template - auto operator&& (ContinuableBase const& right)&& { - return combineImpl(std::move(decoration), right.decoration); - } - - template - auto operator&& (ContinuableBase&& right) const& { + auto operator&& (ContinuableBase right) const& { return combineImpl(decoration, std::move(right.decoration)); } - template - auto operator&& (ContinuableBase const& right) const& { - return combineImpl(decoration, right.decoration); - } - template auto undecorateFor(Callback&&) { return decoration.template undecorate(); @@ -619,11 +608,11 @@ struct FailIfWrongArgs { int main(int, char**) { auto dispatcher = SelfDispatcher{}; - (makeTestContinuation() && makeTestContinuation()) + /*(makeTestContinuation() && makeTestContinuation()) .undecorateFor([]() { - }); + });*/ /*auto unwrapper = [](auto&&... args) { return std::common_type>{}; @@ -647,6 +636,15 @@ int main(int, char**) { }) .then([&](int val) { res += val; + }) + .then([] { + + + + return makeTestContinuation(); + }) + .then([] (std::string arg) { + }); return res;