你能用 std::aligned_union 违反严格的别名规则吗

Can you violate the strict aliasing rule with std::aligned_union

联合规则,例如 [class.mem]p20 是否也允许 std::aligned_union_t?例如,如果我将两对(pair<const A, B>pair<A, B>)存储在 std::aligned_union_t 中,并且非 const 对始终处于活动状态。访问 pair<const A> 类型是否违反了严格的别名规则?

标准似乎在 [class.mem]p20 中暗示即使在非 const 对处于活动状态时访问该对的 const 成员也是安全的

union U {
    std::pair<A, B> pair;
    std::pair<const A, const B> const_pair;
};

U u = {A{}, B{}};
cout << u.const_pair.first << endl;
cout << u.const_pair.second << endl;

但是对于 std::aligned_union 和放置 newreinterpret_cast 构造并获得正确值是否同样安全?

(假设AB是标准布局)

当核心语言说"union"时,意思是"union",即"a class defined with the class-key union"。不是被称为 aligned_union_t.

的可悲的图书馆模仿