Variant オブジェクトを支援します。
構文
template <size_t I, class T>
struct variant_alternative; // not defined
template <size_t I, class T>
struct variant_alternative<I, const T>;
template <size_t I, class T>
struct variant_alternative<I, volatile T>;
template <size_t I, class T>
struct variant_alternative<I, const volatile T>;
template <size_t I, class T>
using variant_alternative_t = typename variant_alternative<I, T>::type;
template <size_t I, class... Types>
struct variant_alternative<I, variant<Types...>>;