[英]Maybe my understanding of [class.access]/7 isn't correct, but
在[class.access] / 7中,我们有以下句子:
同样,由于
D
是从A
派生A
,所以使用A::B
作为基本说明符的格式也很正确,因此必须推迟对基本说明符 s的检查,直到看到整个基本说明符列表为止。
class A {
protected:
struct B { };
};
struct D: A::B, A { };
请参阅带有clang的实时示例 。 实际上,clang也抱怨此片段,不需要延迟。
class A {
protected:
struct B { };
};
struct D: A, A::B { };
为什么此代码无法编译?
PS:gcc和VS21013也不编译代码。
我相信这是clang的错误。 Ideone也不接受该代码: http ://ideone.com/uiFl9L:
class A {
protected:
struct B { };
};
struct D: A::B, A { };
我检查了gcc-5.1.0,gcc-4.9和clang-3.7(rc2)。 该标准明确指出其格式正确(请参阅问题),因此编译器有问题。
该示例清除了[class.access] / 6:
第11条中的所有访问控制都会影响从特定实体的声明中访问类成员名称的能力,包括在要声明的实体名称之前的声明部分...
根据[class.access] / 2,这意味着一个类甚至可以在声明所有基类之前访问所有基类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.