Namespaces
Variants

std:: indirectly_readable_traits

From cppreference.net
Iterator library
Iterator concepts
Iterator primitives
(deprecated in C++17)
indirectly_readable_traits
(C++20)


Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
헤더 파일에 정의됨 <iterator>
template < class I >
struct indirectly_readable_traits { } ;
(1) (C++20부터)
template < class T >

struct indirectly_readable_traits < T * > :

/* 조건부 값 타입 */ < T > { } ;
(2) (C++20 이후)
template < class I >

requires std:: is_array_v < I >
struct indirectly_readable_traits < I > ;

{ using value_type = std:: remove_cv_t < std:: remove_extent_t < I >> ; }
(3) (C++20 이후)
template < class T >

struct indirectly_readable_traits < const T > :

indirectly_readable_traits < T > { } ;
(4) (C++20부터)
template < /* has-member-value-type */ T >

struct indirectly_readable_traits < T > :

/* cond-value-type */ < typename T :: value_type > { } ;
(5) (C++20부터)
template < /* has-member-element-type */ T >

struct indirectly_readable_traits < T > :

/* cond-value-type */ < typename T :: element_type > { } ;
(6) (C++20 이후)
template < /* has-member-value-type */ T >

requires /* has-member-element-type */ < T >

struct indirectly_readable_traits < T > { } ;
(7) (C++20 이후)
template < /* 멤버-value-type-존재 */ T >

requires /* 멤버-element-type-존재 */ < T > &&
std:: same_as < std:: remove_cv_t < typename T :: element_type > ,
std:: remove_cv_t < typename T :: value_type >>
struct indirectly_readable_traits < T > :

/* 조건-값-타입 */ < typename T :: value_type > { } ;
(8) (C++20 이후)
헬퍼 클래스와 컨셉
template < class >
struct /* cond-value-type */ { } ;
(1) ( 설명 전용* )
template < class T >

requires std:: is_object_v < T >
struct /* cond-value-type */ < T >

{ using value_type = std:: remove_cv_t < T > ; } ;
(2) ( exposition only* )
template < class T >

concept /* has-member-value-type */ =

requires { typename T :: value_type ; } ;
(3) ( 설명 전용* )
template < class T >

concept /* 멤버-element-type-있음 */ =

requires { typename T :: element_type ; } ;
(4) ( 설명 전용* )

템플릿 인자의 연관된 값 타입을 계산합니다. 연관된 값 타입이 존재하는 경우, 이는 중첩 타입 value_type 으로 표현되며, 그렇지 않은 경우 value_type 은 정의되지 않습니다. 프로그램은 프로그램 정의 타입 에 대해 indirectly_readable_traits 를 특수화할 수 있습니다.

목차

설명

위의 특수화들은 비공식적으로 아래와 같이 설명될 수 있습니다.

주어진 타입 T 에 대해, 이와 연관된 값 타입 V 는 다음과 같이 결정됩니다:

  • 만약 T 가 const 한정자를 가지는 경우, V 는 const 한정자가 제거된 T 의 연관된 값 타입입니다.
  • 그렇지 않고 T 가 배열 타입인 경우, V 는 cv 한정자가 제거된 배열 요소 타입입니다.
  • 그 외의 경우, 조건부 값 타입 C 가 먼저 결정됩니다:
  • T 가 포인터 타입인 경우, C 는 가리키는 타입입니다.
  • 그렇지 않고 T 가 중첩 타입 value_type element_type 을 가지고 있는 경우:
  • 이 타입들이 동일하면(cv 한정자를 고려하지 않음), C typename T::value_type 입니다.
  • 그렇지 않으면, C 는 정의되지 않습니다.
  • 그렇지 않고 T 가 중첩 타입 value_type 은 가지고 있지만 element_type 은 가지고 있지 않은 경우, C typename T::value_type 입니다.
  • 그렇지 않고 T 가 중첩 타입 element_type 은 가지고 있지만 value_type 은 가지고 있지 않은 경우, C typename T::element_type 입니다.
  • 그렇지 않으면, C 는 정의되지 않습니다.
그런 다음 V C 로부터 다음과 같이 결정됩니다:
  • C 가 정의되지 않았거나, C 객체 타입 이 아닌 경우, V 는 정의되지 않습니다.
  • 그렇지 않으면, V 는 cv 비한정 C 입니다.

참고 사항

value_type 는 반복자와 같은 indirectly_readable 타입과 함께 사용하기 위한 것입니다. 범위(ranges)와 함께 사용하기 위한 것은 아닙니다.

예제

결함 보고서

다음 동작 변경 결함 보고서는 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 수정된 동작
LWG 3446 C++20 value_type element_type 중첩 타입을 모두 가진
타입들에 대해 특수화 (5,6) 가 모호했음
특수화 (8) 추가됨
LWG 3541 C++20 LWG 3446이 value_type element_type 이 다른
모호한 경우에 하드 에러를 도입함
특수화 (7) 추가됨

참고 항목

operator* 를 적용하여 간접적으로 읽을 수 있는 타입을 지정함
(concept)
반복자의 연관된 타입들을 계산함
(alias template)
반복자의 속성에 대한 통일된 인터페이스를 제공함
(class template)