Defined in header <type_traits>
template< std::size_t Len, class... Types >
struct aligned_union;
(since C++11)

Provides the nested type type, which is a trivial standard-layout type of a size and alignment suitable for use as uninitialized storage for an object of any of the types listed in Types. The size of the storage is at least Len. std::aligned_union also determines the strictest (largest) alignment requirement among all Types and makes it available as the constant alignment_value.

If sizeof...(Types) == 0 or if any of the types in Types is not a complete object type, the behavior is undefined.

It is implementation-defined whether any extended alignment is supported.

Member types

Name Definition
type the trivial type suitable for storage of any type from Types

Helper types

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

Member constants

the strictest alignment requirement of all Types
(public static member constant)

Possible implementation

#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)...})];


Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR Applied to Behavior as published Correct behavior
LWG 2979 C++11 complete type wasn't required requires complete types

See also

obtains the type's alignment requirements
(class template)
defines the type suitable for use as uninitialized storage for types of given size
(class template)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.