#include <iostream>
class Foo final
{
public:
Foo() = default;
~Foo() = default;
private:
int value;
struct
{
int x;
int y;
};
union
{
int a;
float b;
};
union
{
int v[2];
struct
{
int z;
int w;
};
};
};
void main()
{
Foo foo;
//foo.value; // NG.
//foo.x = 10; // NG
//foo.a = 10; // NG
// foo.v[0] = 10; // NG
// foo.v[1] = 10; // NG
foo.z = 10; // !?
foo.w = 11; // !?
std::cout << foo.z << std::endl; // !?
std::cout << foo.w << std::endl; // !?
}
Error(Active)

特に問題はなし。
※ 9行目の private を public にすれば表示はされない。
Error message

エラーメッセージが出力されない。
ビルドに成功し実行ファイルが生成される。
Console out

!?
この状態で他のエラー要因(なんでもよい)を挿入すれば、
それに誘発されて本件もエラーメッセージに出力はされる。
が、他のエラー要因がなくなると元通り(Debug / Release 関係なし)。
※ 追記
Intellisenseには表示されないので見落としてしまう上、
private としているので直感もあてにならない・・・。
3年程前の Stack Overflow に同問題があるのを見つけた。
Stack Overflow: C++ private modifier ignored on nested anonymous struct
放置かい!
0 件のコメント :
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。