class B {
private:
friend class C;
B() = default;
};
class C : public B {};
class D : public B {};
int main() {
C {};
D {};
return 0;
}
我假设因为只有 classC是 的朋友B,并且B的构造函数是私有的,所以只有 classC是有效的并且D不允许实例化B。但这不是它的工作原理。我的推理在哪里错了,以及如何实现对允许哪些类继承某个基类的这种控制?
更新:正如其他人在评论中指出的那样,上面的代码片段在 C++14 下工作,但不是 C++17。将实例化更改为C c; D d;inmain()在 C++17 模式下也可以按预期工作。