2012-12-11 60 views
10

考慮下面的代碼:從A::B爲什麼GCC允許從私有嵌套類繼承?

class A { 
    class B {}; 
}; 

template <typename C> 
class D : A::B {}; 

void f() { 
    D<int> d; 
} 

D<int>繼承其是私有的嵌套類。我期待這是一個錯誤,但GCC接受這個代碼。這是GCC中的錯誤還是我錯過了一些東西?

+4

看起來像一個錯誤,因爲刪除模板聲明導致預期的錯誤。 – StoryTeller

+1

MSVC引發錯誤。 –

+0

Visual Studio 2012不想編譯該代碼。 – Yester

回答

7

我找到了答案。由於它可能對其他人有用,所以我在這裏發佈 - 這是GCC錯誤47346

+2

+1:即將發佈。 –

+0

@JesseGood:對不起,我通常不回答我自己的問題,但由於沒有什麼活動,我找到了答案。 ;-) – vitaut

+0

這不是一個投訴,你首先發布,所以你應得的upvotes。另外,回答你自己的問題是可以接受的做法。 –

2

您是否嘗試創建非模板派生類?

如果沒有該類的對象,則不會編譯模板類。試試這個類來創建實例或創建非模板派生類 - 海灣合作委員會可能會失敗;-)

編輯 我的壞 - 對象被創建,它不會造成GCC錯誤。對不起。

+2

他確實創建了一個實例。在'f()'... – StoryTeller

+0

好吧,對。 我檢查了一下,它的工作原理是:| 我不明白,真的:) – Yester

相關問題