Skip to content

Commit

Permalink
const_iterator追加 #1084
Browse files Browse the repository at this point in the history
  • Loading branch information
onihusube committed Aug 11, 2023
1 parent ebae6b7 commit a16938b
Show file tree
Hide file tree
Showing 4 changed files with 86 additions and 2 deletions.
2 changes: 1 addition & 1 deletion reference/exposition-only.md
Expand Up @@ -26,7 +26,7 @@
| [`dereferenceable`](iterator/dereferenceable.md) | 単純な間接参照が可能 (concept) | C++20 |
| [`is-integer-like`](iterator/is_integer_like.md) | 符号付整数型と同等の型か否かを表す (variable template) | C++20 |
| [`is-signed-integer-like`](iterator/is_integer_like.md) | 符号なし整数型と同等の型か否かを表す (variable template) | C++20 |
| [`constant-iterator ](iterator/iconstant_iterator.md.nolink) | 要素不変なイテレータ (concept) | C++23 |
| [`constant-iterator` ](iterator/constant-iterator.md) | 要素不変なイテレータ (concept) | C++23 |

## `<ranges>`

Expand Down
2 changes: 1 addition & 1 deletion reference/iterator.md
Expand Up @@ -143,7 +143,7 @@ C++20以降の標準ライブラリでは、任意のイテレータに対して
| 名前 | 説明 | 対応バージョン |
|----------------------------------------------------|------------------------------------------|-------|
| [`basic_const_iterator`](iterator/basic_const_iterator.md) | イテレータの要素を`const`化するラッパーイテレータ(class template) | C++23 |
| [`const_iterator`](iterator/const_iterator.md.nolink) | 要素が`const`化されたイテレータ型を取得する (alias template) | C++23 |
| [`const_iterator`](iterator/const_iterator.md) | 要素が`const`化されたイテレータ型を取得する (alias template) | C++23 |
| [`const_sentinel`](iterator/const_sentinel.md.nolink) | 要素が`const`化された番兵型を取得する (alias template) | C++23 |
| [`make_const_iterator`](iterator/make_const_iterator.md) | `const_iterator`オブジェクトを作るヘルパ関数(function template) | C++23 |
| [`make_const_sentinel`](iterator/make_const_sentinel.md) | `const_sentinel`オブジェクトを作るヘルパ関数(function template) | C++23 |
Expand Down
55 changes: 55 additions & 0 deletions reference/iterator/const_iterator.md
@@ -0,0 +1,55 @@
# const_iterator
* iterator[meta header]
* std[meta namespace]
* type-alias[meta id-type]
* cpp23[meta cpp]

```cpp
namespace std {
template<input_iterator I>
using const_iterator = /*see below*?;
}
```
* input_iterator[link input_iterator.md]
## 概要
任意のイテレータ型`I`を、定数イテレータ型へ変換する。
## 効果
- `I`が[`constant-iterator`]のモデルとなる場合 : `I`
- それ以外の場合 : [`basic_const_iterator`](basic_const_iterator.md)`<I>`
## 例
```cpp example
#include <iterator>
int main() {
static_assert(std::same_as<std::const_iterator<int*>, std::basic_const_iterator<int*>>);
static_assert(std::same_as<std::const_iterator<const int*>, const int*>);
using vec_iter = std::vector<int>::iterator;
static_assert(std::same_as<std::const_iterator<vec_iter>, std::basic_const_iterator<vec_iter>>);
static_assert(std::same_as<std::const_iterator<std::const_iterator<vec_iter>>, std::const_iterator<vec_iter>>);
}
```
* std::const_iterator[color ff0000]

### 出力
```
```

## バージョン
### 言語
- C++23

### 処理系
- [Clang](/implementation.md#clang): ??
- [GCC](/implementation.md#gcc): 13.1
- [Visual C++](/implementation.md#visual_cpp): 2022 Update 6

## 参照

- [P2278R4 `cbegin` should always return a constant iterator](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2278r4.html)
29 changes: 29 additions & 0 deletions reference/iterator/constant-iterator.md
@@ -0,0 +1,29 @@
# constant-iterator
* iterator[meta header]
* std[meta namespace]
* concept[meta id-type]
* cpp23[meta cpp]

```cpp
namespace std {
template<class It>
concept constant-iterator =
input_iterator<It> && same_as<iter_const_reference_t<It>, iter_reference_t<It>>;
}
```
* input_or_output_iterator[link /reference/iterator/input_or_output_iterator.md]
* same_as[link /reference/concepts/same_as.md]
* iter_const_reference_t[link /reference/iterator/iter_const_reference_t.md]
* iter_reference_t[link /reference/iterator/iter_reference_t.md]
## 概要
`constant-iterator`はイテレータ型`It`が定数イテレータであることを表す説明専用のコンセプトである。定数イテレータは、間接参照を通してその要素を変更することができない。
## バージョン
### 言語
- C++23
## 参照
- [P2278R4 `cbegin` should always return a constant iterator](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2278r4.html)

0 comments on commit a16938b

Please sign in to comment.