19 #if FOLLY_HAS_COROUTINES 22 #include <experimental/coroutine> 23 #include <type_traits> 30 void await_suspend(std::experimental::coroutine_handle<>);
37 bool await_suspend(std::experimental::coroutine_handle<>);
44 std::experimental::coroutine_handle<> await_suspend(
45 std::experimental::coroutine_handle<>);
49 struct MissingAwaitReady {
50 void await_suspend(std::experimental::coroutine_handle<>);
54 struct WrongAwaitReadyReturnType {
56 void await_suspend(std::experimental::coroutine_handle<>);
60 struct MissingAwaitSuspend {
65 struct WrongAwaitSuspendArgType {
67 void await_suspend(
float);
71 struct MissingAwaitResume {
73 void await_suspend(std::experimental::coroutine_handle<void>);
76 struct MemberOperatorCoAwait {
77 SomeAwaiter1<void>
operator co_await() &;
78 SomeAwaiter2<int>
operator co_await() &&;
79 SomeAwaiter3<float>
operator co_await()
const&;
82 struct FreeOperatorCoAwait {};
83 SomeAwaiter1<void>
operator co_await(FreeOperatorCoAwait);
85 struct MoveOnlyFreeOperatorCoAwait {};
86 SomeAwaiter1<int>
operator co_await(MoveOnlyFreeOperatorCoAwait&&);
88 struct MemberOperatorCoAwaitWithInvalidAwaiter {
89 int operator co_await();
95 static_assert(!is_awaiter_v<void>,
"");
96 static_assert(!is_awaiter_v<int>,
"");
97 static_assert(!is_awaiter_v<MissingAwaitReady>,
"");
98 static_assert(!is_awaiter_v<WrongAwaitReadyReturnType>,
"");
99 static_assert(!is_awaiter_v<MissingAwaitSuspend>,
"");
100 static_assert(!is_awaiter_v<WrongAwaitSuspendArgType>,
"");
101 static_assert(!is_awaiter_v<MissingAwaitResume>,
"");
102 static_assert(!is_awaiter_v<MemberOperatorCoAwait>,
"");
107 static_assert(is_awaitable_v<MemberOperatorCoAwait>,
"");
108 static_assert(is_awaitable_v<MemberOperatorCoAwait&>,
"");
109 static_assert(is_awaitable_v<MemberOperatorCoAwait&&>,
"");
110 static_assert(is_awaitable_v<const MemberOperatorCoAwait&>,
"");
111 static_assert(is_awaitable_v<FreeOperatorCoAwait>,
"");
112 static_assert(is_awaitable_v<FreeOperatorCoAwait&&>,
"");
113 static_assert(is_awaitable_v<const FreeOperatorCoAwait&>,
"");
114 static_assert(is_awaitable_v<MoveOnlyFreeOperatorCoAwait&&>,
"");
115 static_assert(!is_awaitable_v<MoveOnlyFreeOperatorCoAwait&>,
"");
116 static_assert(!is_awaitable_v<const MoveOnlyFreeOperatorCoAwait&>,
"");
117 static_assert(!is_awaitable_v<void>,
"");
118 static_assert(!is_awaitable_v<MemberOperatorCoAwaitWithInvalidAwaiter>,
"");
121 std::is_same<
awaiter_type_t<SomeAwaiter1<void>>, SomeAwaiter1<void>&>::
typename awaiter_type< Awaitable >::type awaiter_type_t
constexpr bool is_awaiter_v
typename await_result< Awaitable >::type await_result_t
constexpr bool is_awaitable_v
uint64_t value(const typename LockFreeRingBuffer< T, Atom >::Cursor &rbcursor)