std:: indirectly_readable_traits
|
헤더 파일에 정의됨
<iterator>
|
||
|
template
<
class
I
>
struct indirectly_readable_traits { } ; |
(1) | (C++20부터) |
|
template
<
class
T
>
struct
indirectly_readable_traits
<
T
*
>
:
|
(2) | (C++20 이후) |
|
template
<
class
I
>
requires
std::
is_array_v
<
I
>
|
(3) | (C++20 이후) |
|
template
<
class
T
>
struct
indirectly_readable_traits
<
const
T
>
:
|
(4) | (C++20부터) |
|
template
<
/* has-member-value-type */
T
>
struct
indirectly_readable_traits
<
T
>
:
|
(5) | (C++20부터) |
|
template
<
/* has-member-element-type */
T
>
struct
indirectly_readable_traits
<
T
>
:
|
(6) | (C++20 이후) |
|
template
<
/* has-member-value-type */
T
>
requires
/* has-member-element-type */
<
T
>
|
(7) | (C++20 이후) |
|
template
<
/* 멤버-value-type-존재 */
T
>
requires
/* 멤버-element-type-존재 */
<
T
>
&&
|
(8) | (C++20 이후) |
|
헬퍼 클래스와 컨셉
|
||
|
template
<
class
>
struct /* cond-value-type */ { } ; |
(1) | ( 설명 전용* ) |
|
template
<
class
T
>
requires
std::
is_object_v
<
T
>
|
(2) | ( exposition only* ) |
|
template
<
class
T
>
concept
/* has-member-value-type */
=
|
(3) | ( 설명 전용* ) |
|
template
<
class
T
>
concept
/* 멤버-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는 정의되지 않습니다.
-
이 타입들이 동일하면(cv 한정자를 고려하지 않음),
-
그렇지 않고
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) 추가됨 |
참고 항목
|
(C++20)
|
operator*
를 적용하여 간접적으로 읽을 수 있는 타입을 지정함
(concept) |
|
(C++20)
(C++20)
(C++23)
(C++20)
(C++20)
(C++20)
|
반복자의 연관된 타입들을 계산함
(alias template) |
|
반복자의 속성에 대한 통일된 인터페이스를 제공함
(class template) |