namespace std {
template<class I>
using iter_difference_t = /*see below*/;
}
概要
任意のイテレータ型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>);
}
出力
バージョン
言語
- C++20
処理系
- Clang: ??
- GCC: 10.1 ✅
- Visual C++: 2019 Update 6 ✅