2012-12-11 2 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

불평이 아니므로 먼저 게시 했으므로 업 보스를받을 자격이 있습니다. 또한, 자신의 질문에 대답하는 것은 받아 들여지는 연습입니다. –

2

비 템플릿 전달 클래스를 만들려고 했습니까?

해당 클래스의 개체가 없으면 템플릿 클래스가 컴파일되지 않습니다. 이 클래스의 인스턴스를 만들거나 템플릿이 아닌 파생 클래스를 만들어보십시오 - GCC는 아마 실패 할 것이다 ;-)

편집 내 나쁜 - 객체 생성과 gcc가 오류의 원인이 아닙니다. 그 죄송합니다.

+2

그는 인스턴스를 만듭니다. 'f()'... – StoryTeller

+0

좋아, 맞아. 이것을 점검하면 작동합니다. | 나는 그것을 이해하지 못한다. 정말로. – Yester

관련 문제