De momento he cambiado un poco de estrategia ya que el constructor copia de la unión me estaba dando dolores de cabeza. Ahora tengo esto:
Código C++:
Ver original#define stringify(s) istringify(s)
#define istringify(s) #s
template <class... Ts> union variant {};
template<>
union variant<> {
variant() {};
~variant() {};
};
template <class T, class... Ts>
union variant<T, Ts...> {
variant() {};
~variant() {};
T head;
variant<Ts... > tail;
};
template<typename... Ts>
struct dynamic {
std::string type;
variant<Ts...> vnt;
};
int main() {
dynamic<int, std::string> test;
return 0;
}
Ahora toca definir constructores para dynamic al estilo:
Código C++:
Ver originaltemplate<typename U, typename T, typename... Ts>
typename dynamic<T, Ts>::dynamic(const U& u) :
/* si U == T --> type(stringify(U)), vnt(u) <-- constuctor no definido aún */
/* si U != T --> algun tipo de recursividad que tengo que pensar */
{ }
Mañana sigo pensando.
Un saludo!