【问题标题】:Why does GCC allow inheriting from a private nested class?为什么 GCC 允许从私有嵌套类继承?
【发布时间】:2012-12-11 23:14:18
【问题描述】:

考虑以下代码:

class A {
  class B {};
};

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

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

D&lt;int&gt; 继承自 A::B,这是一个私有嵌套类。我原以为这是一个错误,但 GCC 接受此代码。这是 GCC 中的错误还是我遗漏了什么?

【问题讨论】:

  • 看起来像一个错误,因为删除模板声明会导致预期的错误。
  • Visual Studio 2012 不想编译该代码。

标签: c++ gcc g++ nested-class private-members


【解决方案1】:

我找到了答案。由于它可能对其他人有用,我将其发布在这里 - 这是 GCC 错误47346

【讨论】:

  • @JesseGood:抱歉,我通常不会回答我自己的问题,但由于活动很少,我已经找到了答案。 ;-)
  • 这不是投诉,您先发帖,因此您值得点赞。此外,回答您自己的问题是公认的做法。
【解决方案2】:

您是否尝试创建非模板派生类?

如果没有该类的对象,则不会编译模板类。尝试创建此类的实例或创建非模板派生类 - gcc 可能会失败;-)

编辑 我的错 - 对象已创建并且不会导致 gcc 错误。很抱歉。

【讨论】:

  • 好的,对。我检查了这个,它有效:|我不明白,真的:)
猜你喜欢
  • 2016-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-04
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
相关资源
最近更新 更多