友谊和私有嵌套 class 继承

Friendship and private nested class inheritance

我想继承嵌套 class,它位于外部 class 的私有部分。可能吗?

class A {
  friend class B;
  friend class C;
  private:
    class NiceNestedClass {
    };
};

class C {
  void a() {
    A::NiceNestedClass works;
  }
};

class B : A::NiceNestedClass{
};

NiceNestedClass 的实例化不是问题。但是 g++ 不允许我继承它。有什么解决方法吗?

g++ -std=c++11 a.c  -o a
a.c:5:11: error: ‘class A::NiceNestedClass’ is private
     class NiceNestedClass {
           ^
a.c:15:14: error: within this context
 class B : A::NiceNestedClass{

g++ 4.8.4,std=c++11

这是 2013 年报告的已知 gcc 错误

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59482

您的代码是正确的,应该可以使用较新版本的 gcc 进行编译(已在 gcc4.9 及更高版本上修复)。在我这边(gcc5.3)它工作得很好。

这可能是一个错误。使用 gcc.godbolt.org 和 运行

#include <iostream>

class A {
  friend class B;
  friend class C;
  private:
    class NiceNestedClass {
    };
};

class C {
  void a() {
    A::NiceNestedClass works;
  }
};

class B : A::NiceNestedClass{
};

int main(){

}

适用于每个版本的 clang、ICC 和 gcc 4.9.2 或更高版本。任何 4.8.x 或以下的 gcc 都会失败。