2016-01-27 29 views
5

外部クラスのプライベートセクションにあるネストされたクラスを継承したいと思います。出来ますか?親密なネストされたクラス継承

class A { 
    friend class B; 
    friend class C; 
    private: 
    class NiceNestedClass { 
    }; 
}; 

class C { 
    void a() { 
    A::NiceNestedClass works; 
    } 
}; 

class B : A::NiceNestedClass{ 
}; 

NiceNestedClassのインスタンス化は問題になりません。しかし、g ++ではそれを継承することはできません。回避策はありますか?

g++ -std=c++11 a.c -o a 
a.c:5:11: error: ‘class A::NiceNestedClass’ is private 
    class NiceNestedClass { 
     ^
a.c:15:14: error: within this context 
class B : A::NiceNestedClass{ 

グラム++ 4.8.4、STD = C++ 11

+0

作品:http://rextester.com/YIFH82076 エラーが表示されますか?それはおそらく無関係です。 –

答えて

5

これはあなたのコードが正しいとコンパイルする必要があり、2013年に戻って報告された知られているgccのバグ

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59482

です新しいバージョンのgcc(gcc4.9以降で修正済み)私の側(gcc5.3)ではうまく動作します。

3

これはバグかもしれません。 gcc.godbolt.orgを使用して

#include <iostream> 

class A { 
    friend class B; 
    friend class C; 
    private: 
    class NiceNestedClass { 
    }; 
}; 

class C { 
    void a() { 
    A::NiceNestedClass works; 
    } 
}; 

class B : A::NiceNestedClass{ 
}; 

int main(){ 

} 

打ち鳴らすのすべてのバージョンで動作し、ICCとgcc 4.9.2以降でを実行しています。 4.8.x以下のgccで失敗します。

関連する問題