boost::capy::IoAwaitableRange

Concept for ranges of full I/O awaitables.

Synopsis

Declared in <boost/capy/when_any.hpp>

template<typename R>
concept IoAwaitableRange = std::ranges::input_range<R> &&
    std::ranges::sized_range<R> &&
    IoAwaitable<std::ranges::range_value_t<R>>;

Description

A range satisfies IoAwaitableRange if it is a sized input range whose value type satisfies IoAwaitable. This enables when_any to accept any container or view of awaitables, not just std::vector.

Requirements

  • `R` must satisfy `std::ranges::input_range`

  • `R` must satisfy `std::ranges::sized_range`

  • `std::ranges::range_value_t<R>` must satisfy IoAwaitable

Syntactic Requirements

Given r of type R:

  • `std::ranges::begin(r)` is valid

  • `std::ranges::end(r)` is valid

  • `std::ranges::size(r)` returns `std::ranges::range_size_t<R>`

  • `*std::ranges::begin(r)` satisfies IoAwaitable

Example

template<IoAwaitableRange R>
task<void> race_all(R&& awaitables) {
    auto winner = co_await when_any(std::forward<R>(awaitables));
    // Process winner...
}

Template Parameters

Name Description

R

The range type.

See Also

when_any, IoAwaitable

Created with MrDocs