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).