std:: projected
|
헤더에 정의됨
<iterator>
|
||
| (1) | ||
|
template
<
std::
indirectly_readable
I,
std::
indirectly_regular_unary_invocable
<
I
>
Proj
>
|
(C++20부터)
(C++26까지) |
|
|
template
<
std::
indirectly_readable
I,
std::
indirectly_regular_unary_invocable
<
I
>
Proj
>
|
(C++26부터) | |
|
template
<
std::
weakly_incrementable
I,
class
Proj
>
struct
incrementable_traits
<
std
::
projected
<
I, Proj
>>
|
(2) |
(C++20부터)
(C++26까지) |
|
헬퍼 템플릿
|
||
|
template
<
class
I,
class
Proj
>
struct
/*projected-impl*/
|
(3) |
(C++26부터)
( 설명 전용* ) |
projected
는
indirectly_readable
타입
I
와 호출 가능 객체 타입
Proj
를 새로운
indirectly_readable
타입으로 결합하며, 그 참조 타입은
Proj
를
std::
iter_reference_t
<
I
>
에 적용한 결과입니다.
weakly_incrementable
타입이 되도록 만듭니다. 이는
I
가 또한
weakly_incrementable
타입일 때 적용됩니다.
projected
는 호출 가능 객체와 프로젝션을 허용하는 알고리즘들을 제약하는 데에만 사용되므로,
operator
*
(
)
는 정의되지 않습니다.
목차 |
템플릿 매개변수
| I | - | 간접적으로 읽을 수 있는 타입 |
| Proj | - |
역참조된
I
에 적용되는 프로젝션
|
참고 사항
간접 계층은
I
와
Proj
가
projected
의 연관 클래스가 되는 것을 방지합니다.
I
또는
Proj
의 연관 클래스가 불완전한 클래스 타입일 때, 간접 계층은 해당 타입의 정의를 검사하려는 불필요한 시도를 회피하여 하드 에러가 발생하는 것을 방지합니다.
예제
#include <algorithm> #include <cassert> #include <functional> #include <iterator> template<class T> struct Holder { T t; }; struct Incomplete; using P = Holder<Incomplete>*; static_assert(std::equality_comparable<P>); // OK static_assert(std::indirectly_comparable<P*, P*, std::equal_to<>>); // C++26 이전에는 오류 static_assert(std::sortable<P*>); // C++26 이전에는 오류 int main() { P a[10] = {}; // 10개의 널 포인터 assert(std::count(a, a + 10, nullptr) == 10); // OK assert(std::ranges::count(a, a + 10, nullptr) == 10); // C++26 이전에는 오류 }
참고 항목
|
(C++26)
|
투영을 통해
indirectly_readable
타입의 값 타입을 계산함
(alias template) |