std::experimental::ranges:: common_type
|
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 ( ) .
예제
|
이 섹션은 불완전합니다
이유: 예제가 없음 |
참고 항목
|
(C++11)
|
여러 타입들의 공통 타입을 결정합니다
(클래스 템플릿) |
|
여러 타입들의 공통 참조 타입을 결정합니다
(클래스 템플릿) |