* Can be used to specialize the asynchronous control flow
on immediate available asynchronous results mostly returned by:
- make_ready_continuable
- make_exceptional_continuable
* Usable to avoid longer unnecessary synchronous callback nestings.
* cti::query_arg_t was renamed into cti::unpack_arg_t.
* The continuation overload nowreturns result<Args...> rather
than std::tuple<Args...>.
* Add is_ready optimizations to make_exceptional_continuable.
* This allows cheap cancellation of the control flow by passing
a default constructed `exception_t` object to `set_exception`.
* Since possible representatives like
- `std::exception_ptr`
- `std::error_code`
- `std::error_condition`
can be default constructed we have to test them anyway before possibly
rethrowing them.
* This makes it possible to use promise_base for optional
promises directly rather than wrapping it as optional<promise_base<...>>.
* Invalidate the promise_base after its first usage.
* Expose an `operator bool()` to make the validility accessible.
* Remove the no longer needed private promise_no_init_arg_t tag.
* Makes it possible to specify an executor in addition to
the arguments passed to async.
* The reason why async should not support this directly is
that it should be closely modelled to std::async.
* Makes compiler output much more readable
This is configurateable through CONTINUABLE_WITH_IMMEDIATE_TYPES,
and automatically enabled for debug builds but disabled
for release builds.
* Remove the old continuable-trait.hpp header
* Make the signature of continuable not dependent anymore
on any size of the arguments which fixes the compilation
with forward declared types.
Thanks Rogiel for the correspoding bug report.
Closes#11
* Also allow to customize it through the
CONTINUABLE_WITH_CUSTOM_FINAL_CALLBACK define.
This can be used to implement custom unhandled
exception handlers and more.