diff --git a/reference/exposition-only.md b/reference/exposition-only.md index c345766e3..003ffcbfa 100644 --- a/reference/exposition-only.md +++ b/reference/exposition-only.md @@ -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 | ## `` diff --git a/reference/iterator.md b/reference/iterator.md index 2d403b9f1..e1692f44c 100644 --- a/reference/iterator.md +++ b/reference/iterator.md @@ -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 | diff --git a/reference/iterator/const_iterator.md b/reference/iterator/const_iterator.md new file mode 100644 index 000000000..2aca4c4d6 --- /dev/null +++ b/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 + using const_iterator = /*see below*?; +} +``` +* input_iterator[link input_iterator.md] + +## 概要 + +任意のイテレータ型`I`を、定数イテレータ型へ変換する。 + +## 効果 + +- `I`が[`constant-iterator`]のモデルとなる場合 : `I` +- それ以外の場合 : [`basic_const_iterator`](basic_const_iterator.md)`` + +## 例 +```cpp example +#include + +int main() { + static_assert(std::same_as, std::basic_const_iterator>); + static_assert(std::same_as, const int*>); + + using vec_iter = std::vector::iterator; + + static_assert(std::same_as, std::basic_const_iterator>); + static_assert(std::same_as>, std::const_iterator>); +} +``` +* 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) diff --git a/reference/iterator/constant-iterator.md b/reference/iterator/constant-iterator.md new file mode 100644 index 000000000..63462148a --- /dev/null +++ b/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 + concept constant-iterator = + input_iterator && same_as, iter_reference_t>; +} +``` +* 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)