Skip to content

Commit

Permalink
const_sentinel追加 #1084
Browse files Browse the repository at this point in the history
  • Loading branch information
onihusube committed Aug 21, 2023
1 parent 7f2cc9c commit dbc5cfe
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 1 deletion.
2 changes: 1 addition & 1 deletion reference/iterator.md
Expand Up @@ -144,7 +144,7 @@ C++20以降の標準ライブラリでは、任意のイテレータに対して
|----------------------------------------------------|------------------------------------------|-------|
| [`basic_const_iterator`](iterator/basic_const_iterator.md) | イテレータの要素を`const`化するラッパーイテレータ(class 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 |
| [`const_sentinel`](iterator/const_sentinel.md) | 要素が`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
60 changes: 60 additions & 0 deletions reference/iterator/const_sentinel.md
@@ -0,0 +1,60 @@
# const_sentinel
* iterator[meta header]
* std[meta namespace]
* type-alias[meta id-type]
* cpp23[meta cpp]

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

### 出力
```
```

## バージョン
### 言語
- 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)

0 comments on commit dbc5cfe

Please sign in to comment.