c++ templates unions

c++ - ¿Puede la unión ser templada?



templates unions (2)

Sí, he usado construcciones como esa antes:

template <typename T> union test { unsigned char ch[sizeof(T)]; T variable; };

Parece que las uniones pueden ser modeladas en c ++ 11, se usan, por ejemplo, en la implementación de referencia de std :: opcional .

¿Eso fue posible antes de c ++ 11?


Sí, parece que esto siempre ha sido permitido. Una unión es una clase, y una plantilla es una función o una plantilla de clase.

Partes relevantes de los estándares:

  • [temperatura]

    La declaración en una plantilla-declaración deberá

    - declarar o definir una función o clase, [...]

  • [clase]

    Una unión es una clase definida con la union clave de clase

(Entonces, uno podría argumentar que el nuevo tipo std::is_class es un nombre ligeramente incorrecto, se supone que los rasgos deben dividir el espacio de tipos, y así is_union es un rasgo separado, mutuamente exclusivo).