namespace std {
template<class I>
using iter_value_t = /*see below*/;
}
概要
任意のイテレータ型I
から、そのイテレータの要素型(value_type
)を取得する。
効果
RI = remove_cvref_t<I>
とすると、次のどちらか
iterator_traits<RI>
がプライマリテンプレートの特殊化となる場合indirectly_readable_traits<RI>::value_type
- その他の場合
iterator_traits<RI>::value_type
備考
プログラム定義型(ユーザー定義の任意のイテレータ型)でこの結果をカスタマイズするには、indirectly_readable_traits
を特殊化する。
例
#include <iterator>
#include <vector>
int main() {
using vec_iterator = std::vector<int>::iterator;
using pointer = double*;
static_assert(std::same_as<std::iter_value_t<vec_iterator>, int>);
static_assert(std::same_as<std::iter_value_t<pointer> , double>);
}
出力
バージョン
言語
- C++20
処理系
- Clang: ??
- GCC: 10.1 ✅
- Visual C++: 2019 Update 6 ✅