static_assert(awaiter<std::suspend_always>);
static_assert(awaiter_of<std::suspend_always, void>);
static_assert(awaitable<std::suspend_always>);
static_assert(awaitable_of<std::suspend_always, void>);
static_assert(awaitable_of<
async<int (*)()>,
int &&>);
static_assert(awaitable_of<
async<int (*)()> &&,
int &&>);
static_assert(!awaitable<
async<int (*)()> &>);
static_assert(!awaitable<
const async<int (*)()> &>);
static_assert(awaitable_of<
async<
int &(*)()>,
int &>);
static_assert(awaitable_of<
async<
int &(*)()> &&,
int &>);
static_assert(!awaitable<
async<
int &(*)()> &>);
static_assert(!awaitable<
const async<
int &(*)()> &>);
static_assert(awaitable_of<
async<
const int &(*)()>,
const int &>);
static_assert(awaitable_of<
async<
const int &(*)()> &&,
const int &>);
static_assert(!awaitable<
async<
const int &(*)()> &>);
static_assert(!awaitable<
const async<
const int &(*)()> &>);
static_assert(awaitable_of<
async<void (*)()>,
void>);
static_assert(awaitable_of<
async<void (*)()> &&,
void>);
static_assert(!awaitable<
async<void (*)()> &>);
static_assert(!awaitable<
const async<int (*)()> &>);
static_assert(awaitable_of<task<int>, int &&>);
static_assert(awaitable_of<task<int> &, const int &>);
static_assert(awaitable_of<const task<int> &, const int &>);
static_assert(awaitable_of<task<int> &&, int &&>);
static_assert(awaitable_of<task<int &>, int &>);
static_assert(awaitable_of<task<int &> &, int &>);
static_assert(awaitable_of<const task<int &> &, int &>);
static_assert(awaitable_of<task<int &> &&, int &>);
static_assert(awaitable_of<task<const int &>, const int &>);
static_assert(awaitable_of<task<const int &> &, const int &>);
static_assert(awaitable_of<const task<const int &> &, const int &>);
static_assert(awaitable_of<task<const int &> &&, const int &>);
static_assert(awaitable_of<task<void>, void>);
static_assert(awaitable_of<task<void> &, void>);
static_assert(awaitable_of<const task<void> &, void>);
static_assert(awaitable_of<task<void> &&, void>);
static_assert(!awaitable<generator<int>>);
static_assert(std::input_iterator<generator<int>::iterator>);
static_assert(std::ranges::input_range<generator<int>>);
static_assert(std::ranges::viewable_range<generator<int>>);
static_assert(std::ranges::view<generator<int>>);
int main() {}