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...
}
See Also
when_any, IoAwaitable
Created with MrDocs