私はn3690
、次のC++14
標準のドラフトを調べています、そして私はセクション7.2
パラグラフで見ます9
:
2つの列挙型は、基になる型が同じである場合、レイアウト互換です。
ただし、列挙型がその基になる型とレイアウト互換であると言うものは何も見つかりません。「基礎となるタイプ」が何を意味するかについての合理的なセマンティクスを考えると、これが従うべきであることは私には明らかなようですが、実際には標準によって保証されていますか?
いいえ、これを指定する規格からのブラックレターの引用はありません。最も近いのは、同じ段落のポイント7です。
7 [...]基になる型は、列挙で定義されたすべての列挙子の値を表すことができる整数型です。すべての列挙子の値を表すことができる整数型がない場合、列挙は不正な形式になります。[...]
さらに、4.5インテグラルプロモーション[conv.prom]は言う
4基になる型が固定されている(7.2)スコープのない列挙型のprvalueは、基になる型のprvalueに変換できます。
コメントで指摘されているように、列挙型とその基になる型の間でエンディアンが異なる(不正なIMO)実装が存在する可能性があります。それは実装の品質の問題になります。すべての実用的な目的のために、レイアウトの互換性が期待されるべきです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加