46 lines
2.3 KiB
Markdown
46 lines
2.3 KiB
Markdown
[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)
|