aligned_union Class

Provides a POD type large enough and suitably aligned to store a union type, and the size required.


template <std::size_t Len, class... Types>
struct aligned_union;

template <std::size_t Len, class... Types>
using aligned_union_t = typename aligned_union<Len, Types...>::type;


The alignment value for the largest type in the union.

The distinct types in the underlying union.


Use the template class to get the alignment and size needed to store a union in uninitialized storage. The member typedef type names a POD type suitable for storage of any type listed in Types; the minimum size is Len. The static member alignment_value of type std::size_t contains the strictest alignment required of all the types listed in Types.


The following example shows how to use aligned_union to allocate an aligned stack buffer to place a union.

// std__type_traits__aligned_union.cpp
#include <iostream>
#include <type_traits>

union U_type
    int i;
    float f;
    double d;
    U_type(float e) : f(e) {}

typedef std::aligned_union<16, int, float, double>::type aligned_U_type;

int main()
    // allocate memory for a U_type aligned on a 16-byte boundary
    aligned_U_type au;
    // do placement new in the aligned memory on the stack
    U_type* u = new (&au) U_type(1.0f);
    if (nullptr != u)
        std::cout << "value of u->i is " << u->i << std::endl;
        // must clean up placement objects manually!
value of u->i is 1065353216


Header: <type_traits>

Namespace: std

See also

alignment_of Class