Namespaces
Variants

std::experimental::ranges:: common_type

From cppreference.net
template < class ... T >
struct common_type ;
(ranges TS)

모든 타입 T... 사이의 공통 타입을 결정합니다. 즉, 모든 T... 가 암시적으로 변환될 수 있는 타입입니다. 그러한 타입이 존재하는 경우(아래 규칙에 따라 결정됨), 멤버 type 은 해당 타입을 나타냅니다. 그렇지 않으면 멤버 type 이 존재하지 않습니다. T... 에 포함된 어떤 타입이 (possibly cv-qualified) void 를 제외한 불완전한 타입인 경우의 동작은 정의되지 않습니다.

  • 만약 sizeof... ( T ) 이 0이면, type 멤버가 존재하지 않습니다.
  • 만약 sizeof... ( T ) 이 1이면 (즉, T... 가 단 하나의 타입 T0 만을 포함하는 경우), type 멤버는 std:: decay_t < T0 > 와 동일한 타입을 나타냅니다.
  • 만약 sizeof... ( T ) 이 2이면 (즉, T... 가 정확히 두 개의 타입 T1 T2 를 포함하는 경우),
  • 만약 T1 T2 중 적어도 하나에 std::decay 를 적용했을 때 다른 타입이 생성된다면, 멤버 type ranges :: common_type_t < std:: decay_t < T1 > , std:: decay_t < T2 >> 와 동일한 타입을 나타냅니다(해당 타입이 존재할 경우). 존재하지 않는다면 멤버 type 이 없습니다.
  • 그렇지 않은 경우(그리고 ranges :: common_type < T1, T2 > 에 대한 사용자 특수화가 없는 경우), std:: common_type_t < T1, T2 > 가 유효한 형식이라면 멤버 type 은 해당 타입을 나타냅니다.
  • 그렇지 않으면, 멤버 type std:: decay_t < decltype ( false ? std:: declval < const T1 & > ( ) : std:: declval < const T2 & > ( ) ) > 타입을 나타내며, 해당 조건부 표현식이 유효하지 않다면 멤버 type 이 없습니다.
  • 만약 sizeof... ( T ) 이 2보다 크면 (즉, T... T1, T2, R... 타입들로 구성된 경우), ranges :: common_type_t < T1, T2 > 가 존재할 때, 멤버 type ranges :: common_type_t < ranges :: common_type_t < T1, T2 > , R... > 를 나타냅니다 (해당 타입이 존재하는 경우). 다른 모든 경우에는 type 멤버가 존재하지 않습니다.

목차

멤버 타입

이름 정의
type 모든 T... 에 대한 공통 타입

헬퍼 타입

template < class ... T >
using common_type_t = typename common_type < T... > :: type ;

특수화

사용자는 common_type T1 T2 타입에 대해 특수화할 수 있습니다.

  • T1 T2 중 적어도 하나가 사용자 정의 타입에 의존하며,
  • std::decay T1 T2 모두에 대해 항등 변환인 경우.

그러한 특수화가 type 라는 멤버를 가질 경우, 이는 T1 T2 양쪽 모두가 명시적으로 변환 가능한 cv-한정자가 없는 비참조 타입을 지칭하는 public이며 모호하지 않은 멤버 타입이어야 합니다. 추가적으로, ranges :: common_type_t < T1, T2 > ranges :: common_type_t < T2, T1 > 는 동일한 타입을 나타내야 합니다.

이러한 규칙을 위반하여 common_type 특수화를 추가하는 프로그램은 미정의 동작을 가집니다.

참고 사항

승격의 대상이 아닌 산술 타입에 대해, 공통 타입은 다음과 같은 (혼합 모드일 수 있는) 산술 표현식의 타입으로 볼 수 있습니다: T0 ( ) + T1 ( ) + ... + Tn ( ) .

예제

참고 항목

여러 타입들의 공통 타입을 결정합니다
(클래스 템플릿)
여러 타입들의 공통 참조 타입을 결정합니다
(클래스 템플릿)