std::iter_value_t 외 반복자 연관 타입
std::iter_value_t 외 반복자 연관 타입 (Iterator associated types)
반복자의 연관 타입(값·참조·차이·rvalue 참조·공통 참조)을 얻기 위한 타입 별칭들이에요. C++20부터 있어요.
출처: cppreference
본문
<iterator> 헤더에 정의돼 있어요.
// (1) iter_value_t
template< class T >
using iter_value_t = /* see below */;
// (2) iter_reference_t
template< /*dereferenceable*/ T >
using iter_reference_t = decltype(*std::declval<T&>());
// (3) iter_const_reference_t (C++23)
template< std::indirectly_readable T >
using iter_const_reference_t =
std::common_reference_t<const std::iter_value_t<T>&&,
std::iter_reference_t<T>>;
// (4) iter_difference_t
template< class T >
using iter_difference_t = /* see below */;
// (5) iter_rvalue_reference_t (C++20)
template< /*dereferenceable*/ T>
requires /* see below */
using iter_rvalue_reference_t =
decltype(ranges::iter_move(std::declval<T&>()));
// (6) iter_common_reference_t (C++20)
template< std::indirectly_readable T >
using iter_common_reference_t =
std::common_reference_t<std::iter_reference_t<T>,
/*indirect-value-t*/<T>>;
헬퍼 템플릿
// (7) /*dereferenceable*/ 컨셉 (exposition only)
template< class T >
concept /*dereferenceable*/ = /* see below */;
정의
iter_value_t<T>—T의 값 타입.indirectly_readable_traits<T>::value_type으로부터 구해져요.iter_reference_t<T>—*std::declval<T&>()의 타입(역참조 참조 타입).iter_difference_t<T>—T의 차이 타입.incrementable_traits<T>::difference_type으로부터 구해져요.iter_rvalue_reference_t<T>—ranges::iter_move결과의 타입.
iter_value_t, iter_difference_t는 std::indirectly_readable·std::incrementable 컨셉에서 사용돼요.
예제
#include <iterator>
#include <vector>
#include <type_traits>
int main()
{
using It = std::vector<int>::iterator;
static_assert(std::same_as<std::iter_value_t<It>, int>);
static_assert(std::same_as<std::iter_difference_t<It>, std::ptrdiff_t>);
}