Namespaces
Variants

std::variant_alternative, std::variant_alternative_t

from ko.cppreference.net
 
 
유틸리티 라이브러리
일반 유틸리티
관계 연산자 (C++20에서 폐지됨)
정수 비교 함수
(C++20)(C++20)(C++20)    
(C++20)
스왑 및 타입 연산
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
공통 어휘 타입
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
헤더 <variant>
template <std::size_t I, class T>
struct variant_alternative; /* undefined */
에 정의됨 (1) (C++17부터)
template <std::size_t I, class... Types>
struct variant_alternative<I, variant<Types...>>;
(2) (C++17부터)
template <std::size_t I, class T> class variant_alternative<I, const T>;
(3) (C++17부터)
template <std::size_t I, class T>
class variant_alternative<I, volatile T>;
template <std::size_t I, class T>
class variant_alternative<I, const volatile T>;
(3) (C++17부터)
(C++20에서 폐지됨)

잠재적으로 cv-한정된 variant의 대안 타입에 대한 컴파일 타임 인덱스 접근을 제공하며, variant의 cv-한정(있는 경우)과 대안의 cv-한정을 결합합니다.

공식적으로,

2)는 멤버 typedef 를 포함하여 TransformationTraittype 요구 사항을 충족하며, 이 typedef는 인덱스 I
인 대안의 타입과 동일합니다.3)는 멤버 typedef 를 포함하여 TransformationTraittype 요구 사항을 충족하며, 이 typedef는 각각 std::add_const_t<std::variant_alternative_t<I,T>>, std::add_volatile_t<std::variant_alternative_t<I,T>>, std::add_cv_t<std::variant_alternative_t<I,T>>

멤버 타입

멤버 타입 정의
type variant의 I 번째 alternative의 타입. I 는 반드시 [0, sizeof...(Types)) 범위 내에 있어야 하며, 그렇지 않을 경우 프로그램은 ill-formed입니다.

헬퍼 템플릿 별칭

template < size_t I, class T >
using variant_alternative_t = typename variant_alternative < I, T > :: type ;
(C++17부터)

예제

#include <variant>
#include <iostream>
using my_variant = std::variant<int, float>;
static_assert(std::is_same_v
    <int,   std::variant_alternative_t<0, my_variant>>);
static_assert(std::is_same_v
    <float, std::variant_alternative_t<1, my_variant>>);
// variant 타입의 cv 한정자는 추출된 대체 타입으로 전파됩니다.
static_assert(std::is_same_v
    <const int, std::variant_alternative_t<0, const my_variant>>);
int main()
{
    std::cout << "All static assertions passed.\n";
}

출력:

All static assertions passed.

결함 보고서

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

DR 적용 대상 게시된 동작 올바른 동작
LWG 2974 C++17 범위를 벗어난 인덱스가 미정의 동작을 초래함 잘못된 형식으로 처리됨

참고 항목

컴파일 타임에 variant 의 대안 목록 크기를 구함
(클래스 템플릿) (변수 템플릿)
지정된 요소의 타입을 구함
(클래스 템플릿 특수화)