次のコードがあります。
class Base
{
private:
class NestedBase
{
public:
void Do() {}
};
public:
NestedBase nested;
};
int main()
{
Base b;
b.nested.Do(); // line A compiles
Base::NestedBase instance; // line B doesn't compile
}
NestedBase
class は のプライベートな入れ子クラスなBase
ので、B 行がコンパイルされないのは当然のようです。しかし一方で、 variableb
には public memberがあり、 (行 A のように)外部からnested
そのメソッドを呼び出すことができます。そのような場合、ネストされたプライベート クラス (またはそのメンバー) へのアクセスを規制する正確な規則は何ですか? 規格はこれについて何と言っていますか?Do()
Base