# std::indirectly_writable

From cppreference.com
< cpp‎ | iterator

Defined in header `<iterator>` |  |

template< class Out, class T >

concept indirectly_writable =
requires(Out&& o, T&& t) {
*o = std::forward <T>(t);
* std::forward <Out>(o) = std::forward <T>(t);
const_cast<const std::iter_reference_t <Out>&&>(*o) = std::forward <T>(t);
const_cast<const std::iter_reference_t <Out>&&>(* std::forward <Out>(o)) =
std::forward <T>(t);
};

/* none of the four expressions above are required to be equality-preserving */

(since C++20)

The concept indirectly_writable<Out, T> specifies the requirements for writing a value whose type and value category are encoded by `T` into an iterator `Out`'s referenced object.

### Semantic requirements

Let `e` be an expression such that decltype((e)) is `T`, and `o` be a dereferenceable object of type `Out`, then indirectly_writable<Out, T> is modeled only if:

- If std::indirectly_readable <Out> is modeled and std::iter_value_t <Out> is the same type as std::decay_t <T>, then *o after any above assignment is equal to the value of `e` before the assignment.

`o` is not required to be dereferenceable after evaluating any of the assignment expressions above. If `e` is an xvalue, the resulting state of the object it denotes is valid but unspecified.

### Equality preservation

Expressions declared in requires expressions of the standard library concepts are required to be equality-preserving (except where stated otherwise).

### Notes

The only valid use of operator* is on the left side of an assignment expression. Assignment through the same value of an indirectly writable type may happen only once.

The required expressions with `const_cast` prevent `indirectly_readable` objects with prvalue `reference` types from satisfying the syntactic requirements of `indirectly_writable` by accident, while permitting proxy references to continue to work as long as their constness is shallow. See Ranges TS issue 381.

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/iterator/indirectly_writable&oldid=159909"