[indirectcallable.traits]

# 24 Iterators library [[iterators]](./#iterators)

## 24.3 Iterator requirements [[iterator.requirements]](iterator.requirements#indirectcallable.traits)

### 24.3.6 Indirect callable requirements [[indirectcallable]](indirectcallable#traits)

#### 24.3.6.2 Indirect callable traits [indirectcallable.traits]

[1](#1)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L2436)

To implement algorithms taking projections,
it is necessary to determine the projected type of an iterator's value type[.](#1.sentence-1)

For the exposition-only alias template *indirect-value-t*,*indirect-value-t*<T> denotes

- [(1.1)](#1.1)

invoke_result_t<Proj&, *indirect-value-t*<I>> if T names projected<I, Proj>, and

- [(1.2)](#1.2)

iter_value_t<T>& otherwise[.](#1.sentence-2)
