Adds the coroutine std::experimental::task<T> type described in proposal P1056R0.
See https://wg21.link/P1056R0.
This implementation allows customization of the allocator used to allocate the
coroutine frame by passing std::allocator_arg as the first argument, followed by
the allocator to use.
This supports co_awaiting the same task multiple times. The second and
subsequent times it returns a reference to the already-computed value.
This diff also adds some implementations of other utilities that have potential for
standardization as helpers within the test/... area:
- sync_wait(awaitable) - See P1171R0
- manual_reset_event
Move the definition of the aligned_allocation_size helper function
from <experimental/memory_resource> to <experimental/memory>
so it can be more widely used without pulling in memory_resource.
Outstanding work:
- Use C++14 keywords directly rather than macro versions eg. use noexcept instead of _NOEXCEPT).
- Add support for overaligned coroutine frames. This may need wording in the Coroutines TS to support passing the extra std::align_val_t.
- Eliminate use of if constexpr if we want it to compile under C++14.
This is missing preconditions that __a is a power of 2, and that __s <= -__a.