グローバル無名共用体についてちょっと理解できないことがあるので質問させてください。(基礎的な事なのですが…)
グローバル無名共用体は
①static指定子をつける必要がある
②非公開メンバは含めてはならない
という特徴があります。
しかし、
union{ private: int a; int b; }c; void main() { }のように、宣言と同時に変数を定義した場合、staic指定子をつけてない&メンバが非公開として
宣言されているにも関わらず、コンパイルエラーにはなりませんでした。
もちろん、変数を定義せず、宣言のみだった場合にはコンパイラエラーになります。↓
error C2646: 無名共用体がグローバルなスコープをもっていますが、static として宣言されていません。
error C2626: 無名共用体で private メンバ '<unnamed-tag>::a' が定義されています。 error C2626: 無名共用体で private メンバ '<unnamed-tag>::b' が定義されています。
これはどう解釈したら良いのでしょうか?(変数を同時に定義した場合はただの共用体とみなされる?)
また、そもそもグローバル無名共用体は実際にどのようなときに使われるのでしょうか?
ご教授お願いします。
環境は、VC++ 2005 EE です。