[英]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.