名前空間
変種
操作

std::aligned_union

提供: cppreference.com
< cpp‎ | types
 
 
 
型サポート
型プロトタイプ
(C++11)
(C++11)
(C++14)
(C++11)
(C++11)(C++20以前)
(C++11)(C++20で非推奨)
(C++11)
型特性定数
メタ関数
(C++17)
エンディアン
(C++20)
サポートされている操作
関係と性質の問い合わせ
(C++11)
(C++11)
型変更
(C++11)(C++11)(C++11)
型変換
aligned_union
(C++11)
(C++11)
(C++11)
(C++17)
(C++11)(C++20以前)(C++17)
 
ヘッダ <type_traits> で定義
template< std::size_t Len, class... Types >
struct aligned_union;
(C++11およびそれ以降)

Types にリストされた任意の型のオブジェクトのための未初期化記憶域として使用するのに適したサイズとアライメントのトリビアル標準レイアウト型であるメンバ型 type を提供します。 記憶域のサイズは少なくとも Len です。 std::aligned_union はすべての Types のうち最も厳しい (大きな) アライメント要件を調べ、定数 alignment_value として利用できるようにします。

sizeof...(Types) == 0 の場合、または Types の型のいずれかが完全オブジェクト型でない場合、動作は未定義です。

任意の拡張アライメントがサポートされるかどうかは処理系定義です。

目次

[編集] メンバ型

名前 定義
type Types の任意の型の記憶域に適したトリビアルな型

[編集] ヘルパー型

template< std::size_t Len, class... Types >
using aligned_union_t = typename aligned_union<Len,Types...>::type;
(C++14およびそれ以降)

[編集] メンバ定数

alignment_value
[static]
すべての Types のうち最も厳しいアライメント要件
(パブリック静的メンバ定数)

[編集] 実装例

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

[編集]

[編集] 欠陥報告

以下の動作変更欠陥報告は以前に発行された C++ 標準に遡って適用されました。

DR 適用先 発行時の動作 正しい動作
LWG 2979 C++11 complete type wasn't required requires complete types

[編集] 関連項目

型のアライメント要件を取得します
(クラステンプレート) [edit]
指定されたサイズの未初期化記憶域として使用するのに適した型を定義します
(クラステンプレート) [edit]