Espacios de nombres
Variantes

std::aligned_union

De cppreference.com
 
 
Biblioteca de servicios
 
Apoyo de tipos
Tipos básicos
Tipos fundamentales
Tipos enteros de anchura fija (C++11)
Límites numéricos
Interfaz de C de límites numéricos
Información de tipo
en tiempo de ejecución
Rasgos de tipos
Categorías de tipos
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Propiedades de tipos
(C++11)
(C++11)
(C++14)
(C++11)
(C++11)(hasta C++20)
(C++11)(en desuso en C++20)
(C++11)
Constantes de rasgos de tipos
Metafunciones
(C++17)
Contexto de evaluación constante
Operaciones soportadas
Relaciones y consultas de propiedades
Modificaciones de tipos
(C++11)(C++11)(C++11)
Transformaciones de tipos
(C++11)
(C++11)
(C++17)
(C++11)(hasta C++20)(C++17)
 
<tbody> </tbody>
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.

Tipos miembro

Nombre Definición
type El tipo trivial adecuado para almacenamiento de cualquier tipo en Types

Tipos auxiliares

<tbody> </tbody>
template< std::size_t Len, class... Types > using aligned_union_t = typename aligned_union<Len,Types...>::type;
(desde C++14)

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)

Posible implementación

#include <algorithm>
template <std::size_t Len, class... Types>
struct aligned_union
{
    static constexpr std::size_t alignment_value = std::max({alignof(Types)...});

    struct type
    {
      alignas(alignment_value) char _s[std::max({Len, sizeof(Types)...})];
    };
};

Ejemplo

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

Véase también

Obtiene los requisitos de alineación del tipo
(plantilla de clase) [editar]
Define el tipo adecuado para su uso como almacenamiento sin inicializar para tipos de un tamaño dado
(plantilla de clase) [editar]