boost::capy::awaitable_decomposes_to

Concept for awaitables whose return type decomposes to a specific typelist.

Synopsis

template<
    typename A,
    typename... Types>
concept awaitable_decomposes_to = requires {
    typename detail::awaitable_return_t<A>;
} && decomposes_to<detail::awaitable_return_t<A>, Types...>;

Description

A type satisfies awaitable_decomposes_to if it is an awaitable (has await_resume) and its return type decomposes to the specified typelist.

Requirements

  • `A` must be an awaitable (directly or via `operator co_await`)

  • The return type of `await_resume()` must decompose to `Types...`

Example

// Constrain a function to accept only awaitables that return
// a decomposable result of (error_code, size_t)
template<typename A>
    requires awaitable_decomposes_to<A, std::error_code, std::size_t>
task<void> process(A&& op)
{
    auto [ec, n] = co_await std::forward<A>(op);
    if (ec)
        co_return;
    // process n bytes...
}

Template Parameters

Name Description

A

The awaitable type.

Types

The expected element types after decomposition.

Created with MrDocs