[const.iterators.alias]

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

## 24.5 Iterator adaptors [[predef.iterators]](predef.iterators#const.iterators.alias)

### 24.5.3 Constant iterators and sentinels [[const.iterators]](const.iterators#alias)

#### 24.5.3.2 Alias templates [const.iterators.alias]

[ð](#concept:constant-iterator)

`template<[indirectly_readable](iterator.concept.readable#concept:indirectly_readable "24.3.4.2 Concept indirectly_­readable [iterator.concept.readable]") It>
  using [iter_const_reference_t](#lib:iter_const_reference_t "24.5.3.2 Alias templates [const.iterators.alias]") =
    common_reference_t<const iter_value_t<It>&&, iter_reference_t<It>>;

template<class It>
  concept [constant-iterator](#concept:constant-iterator "24.5.3.2 Alias templates [const.iterators.alias]") =                                                   // exposition only
    [input_iterator](iterator.concept.input#concept:input_iterator "24.3.4.9 Concept input_­iterator [iterator.concept.input]")<It> && [same_as](concept.same#concept:same_as "18.4.2 Concept same_­as [concept.same]")<iter_const_reference_t<It>, iter_reference_t<It>>;

template<[input_iterator](iterator.concept.input#concept:input_iterator "24.3.4.9 Concept input_­iterator [iterator.concept.input]") I>
  using [const_iterator](#lib:const_iterator "24.5.3.2 Alias templates [const.iterators.alias]") = see below;
`

[1](#1)

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

*Result*: If I models [*constant-iterator*](#concept:constant-iterator "24.5.3.2 Alias templates [const.iterators.alias]"), I[.](#1.sentence-1)

Otherwise, basic_const_iterator<I>[.](#1.sentence-2)

[ð](#itemdecl:2)

`template<[semiregular](concepts.object#concept:semiregular "18.6 Object concepts [concepts.object]") S>
  using [const_sentinel](#lib:const_sentinel "24.5.3.2 Alias templates [const.iterators.alias]") = see below;
`

[2](#2)

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

*Result*: If S models [input_iterator](iterator.concept.input#concept:input_iterator "24.3.4.9 Concept input_­iterator [iterator.concept.input]"), const_iterator<S>[.](#2.sentence-1)

Otherwise, S[.](#2.sentence-2)
