考慮下面的代碼:從A::B
爲什麼GCC允許從私有嵌套類繼承?
class A {
class B {};
};
template <typename C>
class D : A::B {};
void f() {
D<int> d;
}
D<int>
繼承其是私有的嵌套類。我期待這是一個錯誤,但GCC接受這個代碼。這是GCC中的錯誤還是我錯過了一些東西?
考慮下面的代碼:從A::B
爲什麼GCC允許從私有嵌套類繼承?
class A {
class B {};
};
template <typename C>
class D : A::B {};
void f() {
D<int> d;
}
D<int>
繼承其是私有的嵌套類。我期待這是一個錯誤,但GCC接受這個代碼。這是GCC中的錯誤還是我錯過了一些東西?
您是否嘗試創建非模板派生類?
如果沒有該類的對象,則不會編譯模板類。試試這個類來創建實例或創建非模板派生類 - 海灣合作委員會可能會失敗;-)
編輯 我的壞 - 對象被創建,它不會造成GCC錯誤。對不起。
他確實創建了一個實例。在'f()'... – StoryTeller
好吧,對。 我檢查了一下,它的工作原理是:| 我不明白,真的:) – Yester
看起來像一個錯誤,因爲刪除模板聲明導致預期的錯誤。 – StoryTeller
MSVC引發錯誤。 –
Visual Studio 2012不想編譯該代碼。 – Yester