- iterator[meta header]
- std[meta namespace]
- type-alias[meta id-type]
- cpp20[meta cpp]
namespace std {
template<class I>
using iter_difference_t = /*see below*/;
}
- see below[italic]
任意のイテレータ型I
から、そのイテレータ間の差分(距離)を表す型(difference_type
)を取得する。
RI = remove_cvref_t<I>
とすると、次のどちらか
incrementable_traits
<RI>::difference_type
iterator_traits
<RI>
がプライマリテンプレートの特殊化となる場合
iterator_traits
<RI>::difference_type
- その他の場合
プログラム定義型(ユーザー定義の任意のイテレータ型)でこの結果をカスタマイズするには、incrementable_traits
を特殊化する。
#include <iterator>
#include <vector>
int main() {
using vec_iterator = std::vector<int>::iterator;
using pointer = double*;
static_assert(std::same_as<std::iter_difference_t<vec_iterator>, std::ptrdiff_t>);
static_assert(std::same_as<std::iter_difference_t<pointer> , std::ptrdiff_t>);
}
- std::iter_difference_t[color ff0000]
- C++20
- Clang: ??
- GCC: 10.1 [mark verified]
- Visual C++: 2019 Update 6 [mark verified]