### execution::bulk_execute

A customisation point that creates a bulk sender.

    constexpr unspecified bulk_execute = unspecified;

The name `execution::bulk_execute` denotes a customisation point object. If `is_convertible_v<N, size_t>` is true, then the expression `execution::bulk_execute(S, F, N)` for some subexpressions `S`, `F`, and `N` is expression-equivalent to:

- `S.bulk_execute(F, N)`, if that expression is valid. If the function selected does not execute `N` invocations of the function object `F` on the executor `S` in bulk with forward progress guarantee `asio::query(S, execution::bulk_guarantee)`, and the result of that function does not model `sender<void>`, the program is ill-formed with no diagnostic required.
- Otherwise, `bulk_execute(S, F, N)`, if that expression is valid, with overload resolution performed in a context that includes the declaration `void bulk_execute();` and that does not include a declaration of `execution::bulk_execute`. If the function selected by overload resolution does not execute `N` invocations of the function object `F` on the executor `S` in bulk with forward progress guarantee `asio::query(E, execution::bulk_guarantee)`, and the result of that function does not model `sender<void>`, the program is ill-formed with no diagnostic required.
- Otherwise, if the types `F` and `executor_index_t<remove_cvref_t<S>>` model `invocable` and if `asio::query(S, execution::bulk_guarantee)` equals `execution::bulk_guarantee.unsequenced`, then
- Evaluates `DECAY_COPY(std::forward<decltype(F)>(F))` on the calling thread to create a function object `cf`. [Note: Additional copies of `cf` may subsequently be created. --end note.]
- For each value of `i` in `N`, `cf(i)` (or copy of `cf`)) will be invoked at most once by an execution agent that is unique for each value of `i`.
- May block pending completion of one or more invocations of `cf`.
- Synchronizes with (C++Std [intro.multithread]) the invocations of `cf`.
- Otherwise, `execution::bulk_execute(S, F, N)` is ill-formed.

##### Requirements

Header: `asio/execution/bulk_execute.hpp`

Convenience header: `asio/execution.hpp`