는 다음과 같은 코드를 생각해 보자. 이 오류가 예상되지만 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> 상속 :
10
A
답변
7
2
비 템플릿 전달 클래스를 만들려고 했습니까?
해당 클래스의 개체가 없으면 템플릿 클래스가 컴파일되지 않습니다. 이 클래스의 인스턴스를 만들거나 템플릿이 아닌 파생 클래스를 만들어보십시오 - GCC는 아마 실패 할 것이다 ;-)
편집 내 나쁜 - 객체 생성과 gcc가 오류의 원인이 아닙니다. 그 죄송합니다.
+2
그는 인스턴스를 만듭니다. 'f()'... – StoryTeller
+0
좋아, 맞아. 이것을 점검하면 작동합니다. | 나는 그것을 이해하지 못한다. 정말로. – Yester
템플릿 선언을 제거하면 예상되는 오류가 발생하므로 버그처럼 보입니다. – StoryTeller
MSVC에서 오류를 발생시킵니다. –
Visual Studio 2012에서는 해당 코드를 컴파일하지 않습니다. – Yester