std:: iterator_traits <std::counted_iterator>
| Iterator concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator primitives | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Algorithm concepts and utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Indirect callable concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Common algorithm requirements | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator adaptors | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Non-member functions | ||||
|
(C++20)
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
| Helper classes | ||||
|
iterator_traits
<std::counted_iterator>
(C++20)
|
|
ヘッダーで定義
<iterator>
|
||
|
template
<
std::
input_iterator
I
>
requires
/* 下記参照 */
|
(C++20以降) | |
カスタマイズされた(標準の部分特殊化またはプログラム定義の特殊化から生成された)プロパティを継承し、
std::
iterator_traits
<
I
>
から、メンバ型
pointer
が調整されます。ここで
I
は
input_iterator
をモデル化します。
特に、
iterator_concept
(存在する場合)と
iterator_category
は
std::
iterator_traits
<
I
>
から継承されます。
requires節の条件は、 true である場合に限り、 std:: iterator_traits < I > がプライマリテンプレートから生成されない場合です。
目次 |
注記
P2259R1
以前は、
std::
iterator_traits
<
I
>
がプライマリテンプレートから生成される場合でも、この特殊化が使用されていました。その結果、
std::
counted_iterator
<
I
>
をイテレータコンセプト(例:
forward_iterator
)に対してテストする際に、
/*ITER_CONCEPT*/
の決定が
I::iterator_concept
を考慮せず、したがって
std::
counted_iterator
<
I
>
がそのコンセプトをモデル化できないかのように誤動作することがありました。この誤った動作は、libstdc++ 10.4以前およびMSVC STL VS 2022 17.0 Preview 3以前で実装されています。
標準ライブラリは、ポインタ型、 std::iterator_traits 、 std::counted_iterator 、および std::common_iterator に対する部分特殊化を提供します。
例
#include <iterator> #include <list> #include <type_traits> #include <vector> int main() { std::vector v{1, 2, 3, 4}; std::list l{1, 2, 3, 4}; std::counted_iterator iv{v.begin(), 3}; std::counted_iterator il{l.begin(), 3}; static_assert(std::is_same<int*, std::iterator_traits<decltype(iv)>::pointer>()); static_assert(std::is_same<void, std::iterator_traits<decltype(il)>::pointer>()); }
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| P2259R1 | C++20 |
requires節が存在しない
pointer
は無条件に
void
として定義される
|
制約が追加された |
関連項目
|
イテレータのプロパティに対する統一インターフェースを提供する
(クラステンプレート) |