La idea es hacer algo así:
Código C++:
Ver originaltemplate <typename T, typename... Ts>
union variant<T, Ts...> {
variant() {};
template<typename U>
std::conditional<
std::is_same<U, T>,
// si U == T, es el tipo correcto en el campo head actual
typename variant(const U& u) : head(u)
{ },
// si U != T, no es el tipo correcto así que hay que seguir buscando
typename variant(const U& u) : tail(u)
{ }
>
~variant() {};
T head;
variant<Ts... > tail;
};
pero esto no compila.