### I/O object service requirements

An I/O object service must meet the requirements for a service, as well as the requirements listed below.

In the table below, `X` denotes an I/O object service class, `a` and `ao` denote values of type `X`, `b` and `c` denote values of type `X::implementation_type`, and `u` denotes an identifier.

Table 24. IoObjectService requirements

expression | return type | assertion/note pre/post-condition
--- | --- | ---
`X::implementation_type` |  |
`X::implementation_type u;` |  | note: `X::implementation_type` has a public default constructor and destructor.

    a.construct(b);

    a.destroy(b);

note: `destroy()` will only be called on a value that has previously been initialised with `construct()` or `move_construct()`.

    a.move_construct(b, c);

note: only required for I/O objects that support movability.

    a.move_assign(b, ao, c);

note: only required for I/O objects that support movability.