2012-12-11 21 views
10

は、次のコードを考えてみましょう。私はこれがエラーであると予想していましたが、GCCはこのコードを受け入れます。 GCCのバグですか、何か不足していますか?なぜGCCはプライベートネストされたクラスから継承を許可していますか?プライベート入れ子になったクラスです<code>A::B</code>から</p> <pre><code>class A { class B {}; }; template <typename C> class D : A::B {}; void f() { D<int> d; } </code></pre> <p><code>D<int></code>継承:

+4

テンプレート宣言を削除すると、予想されるエラーが発生するため、バグのようです。 – StoryTeller

+1

MSVCがエラーをスローします。 –

+0

Visual Studio 2012では、そのコードをコンパイルしません。 – Yester

答えて

7

私は答えを見つけました。それは他の人にとって役に立つかもしれないので、私はここにそれを掲示しています - これはGCCバグ47346です。

+2

+1:ちょうどそれを投稿していた。 –

+0

@JesseGood:申し訳ありませんが、私は通常自分自身の質問に答えるつもりはありませんが、活動がほとんどなかったので答えを見つけました。 ;-) – vitaut

+0

それは苦情ではなかった、あなたが最初に投稿したので、あなたはupvotesに値する。また、あなた自身の質問に答えることは、受け入れられた練習です。 –

2

テンプレート以外のクラスを作成しようとしましたか?

テンプレートクラスは、そのクラスのオブジェクトがない場合はコンパイルされません。このクラスのインスタンスを作成したり、非テンプレートの派生クラスを作成しようとする - gccがおそらく失敗します;-)

編集 私の悪い - オブジェクトが作成され、それがgccのエラーを引き起こしていません。そのために残念。

+2

彼はインスタンスを作成します。 'f()'で... – StoryTeller

+0

オク、右。 私はこれをチェックして、動作します:| | 私はそれを理解していない、本当に:) – Yester

関連する問題