union
以下は簡単な例です。次のように低レベルを定義できます。
static union
{
uint64_t a;
uint8_t b[8];
};
しかし、このように宣言することはできませんstd::variant
(構文については気にしないでください。間違っている場合は訂正してください!、アイデアをつかんでください)
std::variant<uint64_t, uint8_t[8]> v
cppReferenceは、次のことを明確に述べています。
テンプレート パラメータ
タイプ - このバリアントに格納できるタイプ。すべての型は (おそらく cv 修飾された) 非配列オブジェクト型でなければなりません
また、MSVC-v141 (C++17) コンパイラでコンパイル エラーが発生しました。
エラー C2338 バリアントでは、すべての T が非配列オブジェクト型 ([variant.variant]/2) である必要があります。
std::variant
は主にクラス テンプレートであるため、
データのレイアウト/表現のみが必要なため、配列型のストレージを推測できないという問題がありますか?