This revision is based on @Quuxplusone's suggestion in D108697.
This patch aims to conform the coroutine implementation to C++20 standard.
The reference for this patch is: https://eel.is/c++draft/support.coroutine
The main change of this patch includes:
- Require _LIBCPP_STD_VER > 11. This keeps consistency with tests and gcc.
- Replace _LIBCPP_CONSTEXPR and _NOEXCEPT with constexpr and noexcept.
- Add missing const and noexcept qualifier for functions.
- Break the inheritance relationship of coroutine_handle<Promise>, coroutine_handle<void> and noop_coroutine_handle based on the specification.
- Remove redundant overloads for from_address.
- Use operator<=> to replace <, >, =>, <=.
- Use stable names throughout like` [coroutine.handle.compare] to replace something like 18.11.2.7 comparison operators`.
- Use _LIBCPP_HIDE_FROM_ABI to replace _LIBCPP_INLINE_VISIBILITY.
Test Plan: check-all
I guess we could remove this line once we implement operator <=> for coroutine_handle, right?