7

C++11 では、次の共用体を宣言します。

union U4 {
    char c;
    int i;
    static int si;
};

-std=c++11 -pedantic-errors を使用して g++ 4.7.0 でこのコードをコンパイルすると、次のエラーが発生します (少し編集します)。

エラー: ローカル クラス 'union U4' は、静的データ メンバー 'int U4::si' を持つことはできません [-fpermissive]
エラー: 'U4::si' は、union のメンバーであるため、静的ではない可能性があります

私が見る限り、FDIS (N3242) は名前付き共用体の静的データ メンバーを明示的に許可していません。しかし、FDIS が名前付き共用体の静的データ メンバーを禁止している場所もわかりません。FDIS は、「非静的データ メンバー」で何ができるかについて繰り返し言及しています [セクション 9.5 パラグラフ 1]。対照的に、これは標準が共用体の静的データ メンバーを許可していることを示唆しています。

ユニオンの静的データ メンバーを使用するつもりはありません。必要に応じて、無名共用体を含むクラスで十分に近い効果を得ることができるでしょう。標準の意図を理解しようとしているだけです。

助けてくれてありがとう。

4

1 に答える 1