# otl_output_iterator<T>

Category: iterators | Component type: type

### Description

An `otl_output_iterator` is an Output Iterator that performs output of objects of type `T` to a particular otl_stream. Note that all of the restrictions of an Output Iterator must be obeyed, including the restrictions on the ordering of `operator*` and `operator++` operations.

### Definition

Defined in otl_iter.h.

### Template parameters

Parameter | Description | Default
--- | --- | ---
`T` | The type of object that will be written to the `otl_stream`. The set of value types of an `otl_output_iterator` consists of a single type, `T`. |

### Model of

Output Iterator.

### Type requirements

`T` must be a type such that `otl_stream s;...; s << T` is a valid expression.

### Public base classes

None.

### Members

Member | Where defined | Description
--- | --- | ---
`otl_output_iterator(otl_stream&)` | `otl_output_iterator` | See below.
`otl_output_iterator(const otl_output_iterator&)` | Output Iterator | The copy constructor
`otl_output_iterator& operator=(const otl_output_iterator&)` | Output Iterator | The assignment operator
`otl_output_iterator& operator=(const T&)` | Output Iterator | Used to implement the Output Iterator requirement `*i = t`. [1]
`otl_output_iterator& operator*()` | Output Iterator | Used to implement the Output Iterator requirement `*i = t`. [1]
`otl_output_iterator& operator++()` | Output Iterator | Preincrement
`otl_output_iterator& operator++(int)` | Output Iterator | Postincrement
`output_iterator_tag iterator_category(const otl_output_iterator&)` | iterator tags | Returns the iterator's category.

### New members

These members are not defined in the Output Iterator requirements, but are specific to `otl_output_iterator`.

Function | Description
--- | ---
`otl_output_iterator(otl_stream& s)` | Creates an `otl_output_iterator` such that assignment of `t` through it is equivalent to `s << t`.

### Notes

[1] Note how assignment through an `otl_output_iterator` is implemented. In general, unary `operator*` must be defined so that it returns a proxy object, where the proxy object defines `operator=` to perform the output operation. In this case, for the sake of simplicity, the proxy object is the `otl_output_iterator` itself. That is, `*i` simply returns `i`, and `*i = t` is equivalent to `i = t`. You should not, however, rely on this behavior. It is an implementation detail, and it is not guaranteed to remain the same in future versions.

### See also

otl_input_iterator, Output Iterator, Input Iterator.