std::input_iterator
std::input_iterator (입력 반복자 컨셉)
input_or_output_iterator를 정제해, 참조된 값을 읽을 수 있고 반복자 컨셉 태그가 있다는 요구사항을 추가하는 컨셉이에요. C++20부터 있어요.
출처: cppreference
본문
<iterator> 헤더에 정의돼 있어요.
template< class I >
concept input_iterator =
std::input_or_output_iterator<I> &&
std::indirectly_readable<I> &&
requires { typename /*ITER_CONCEPT*/<I>; } &&
std::derived_from</*ITER_CONCEPT*/<I>, std::input_iterator_tag>;
input_iterator 컨셉은 input_or_output_iterator를 정제해, 참조된 값을 읽을 수 있고(indirectly_readable을 통해), 반복자 컨셉 태그가 있다는 요구사항을 추가해요.
반복자 컨셉 결정
이 컨셉의 정의는 exposition-only 별칭 템플릿 /*ITER_CONCEPT*/으로 명세돼요. /*ITER_CONCEPT*/<I>를 결정하기 위해 ITER_TRAITS<I>가 기본 템플릿에서 생성된 std::iterator_traits<I> 특수화면 I를, 아니면 std::iterator_traits<I>를 나타낸다고 하자:
ITER_TRAITS<I>::iterator_concept이 유효하고 타입을 가리키면,/*ITER_CONCEPT*/<I>는 그 타입을 나타내요.- 그 외에
ITER_TRAITS<I>::iterator_category가 유효하고 타입을 가리키면,/*ITER_CONCEPT*/<I>는 그 타입을 나타내요. (이후 규칙도 이어짐.)