質問

class A {
    public:
            int a;
};

class B: private A {
};

class C: public A {
};

class D: public B, public C {
        D() {
                B::a = 0;
        }
};
.

Bは個人的にAを継承していてもコンパイルされています。だから私のコンパイラを混乱させるcの継承は?

コンパイラはGCC 4.4.7

です。

役に立ちましたか?

解決

標準がそのようなアクセスを許可しないように、

のように、本物のコンパイラのバグのように見えます。

11.2基本クラスと基本クラスメンバのアクセシビリティ

標準自体の外での証拠を探している、誰がすでにCLANGがそのようなアクセスを許可していないwhozcraigは既に育った。

GCCで混同される可能性がある類似のパターンを探しているため、ほとんどのアクセスのパスがどの保護が適用されるかを決定するため、そのようなアクセスを許可したと仮想ベースクラスAを持つダイアロン継承があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top