std::aligned_union
Definido en el archivo de encabezado <type_traits> | ||
template<std::size_t Len, class... Types> struct aligned_union; | (desde C++11) | |
Proporciona el tipo anidado type
, que es un tipo trivial de diseño estándar de un tamaño y alineación adecuados para uso en almacenamiento sin inicializar por un objeto de cualquiera de los tipos listados en Types
. El tamaño del almacenamiento es como mínimo Len
. std::aligned_union también determina el requerimiento de alineación más estricto (el más grande) de entre todos los tipos en Types
y lo hace disponible como la constante alignment_value
.
Si sizeof...(Types)==0 o si alguno de los tipos en Types
no es un tipo objeto completo, el comportamiento está indefinido.
Está definido por la implementación si se soporta cualquier alineación extendida.
El comportamiento de un programa que añade especializaciones para aligned_union
no está definido.
Contenido |
[editar]Tipos miembro
Nombre | Definición |
type | El tipo trivial adecuado para almacenamiento de cualquier tipo en Types |
[editar] Tipos auxiliares
template<std::size_t Len, class... Types> using aligned_union_t =typename aligned_union<Len,Types...>::type; | (desde C++14) | |
[editar]Constantes miembro
alignment_value [estático] | El requerimiento de alineación más estricto de todos los tipos en Types (constante miembro pública estática) |
[editar]Posible implementación
#include <algorithm>template<std::size_t Len, class... Types>struct aligned_union {staticconstexprstd::size_t alignment_value =std::max({alignof(Types)...}); struct type { alignas(alignment_value)char _s[std::max({Len, sizeof(Types)...})];};}; |
[editar]Ejemplo
Esta sección está incompleta Razón: sin ejemplo |
[editar]Informes de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
---|---|---|---|
LWG 2979 | C++11 | No se requerían tipos completos | Se requieren tipos completos |
[editar]Véase también
(C++11) | Obtiene los requisitos de alineación del tipo (plantilla de clase) |
(C++11) | Define el tipo adecuado para su uso como almacenamiento sin inicializar para tipos de un tamaño dado (plantilla de clase) |