在某些结构体
该程序被GCC接受,但是Clang却打印出错误信息:
D
通过 B
私有地继承了另一个结构体 A
,并且第二次通过 C
公开地继承,是否允许在 D
中编写 using B::A
?struct A {};
class B : A {};
struct C : A {};
struct D : B, C {
using B::A; //ok in GCC, error in Clang
};
该程序被GCC接受,但是Clang却打印出错误信息:
error: 'A' is a private member of 'A'
演示:https://gcc.godbolt.org/z/5jeqrzorE
using B::A
只需公开从 D
注入的类名 A
。一方面,A
已经可以在 D
中使用(因此 GCC 接受它),但另一方面,A
在 B
中是私有的(因此 Clang 拒绝它)。哪个编译器是正确的?
struct B
替换了class B
。这将把继承类型从私有改为公有。 - Fedor