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

相关问题