### Completion condition requirements

A completion condition is a function object that is used with the algorithms `read`, `async_read`, `write`, and `async_write` to determine when the algorithm has completed transferring data.

A type `X` meets the `CompletionCondition` requirements if it satisfies the requirements of `Destructible` (C++Std [destructible]) and `MoveConstructible` (C++Std [moveconstructible]), as well as the additional requirements listed below.

In the table below, `x` denotes a value of type `X`, `ec` denotes a (possibly const) value of type `error_code`, and `n` denotes a (possibly const) value of type `size_t`.

Table 9. CompletionCondition requirements

expression | return type | assertion/note pre/post-condition
--- | --- | ---
`x(ec, n)` | `size_t` | Let `n` be the total number of bytes transferred by the read or write algorithm so far. Returns the maximum number of bytes to be transferred on the next `read_some`, `async_read_some`, `write_some`, or `async_write_some` operation performed by the algorithm. Returns `0` to indicate that the algorithm is complete.