标签: c++ language-lawyer c++17 member-access
clang和g++都不会编译this snippet:
clang
g++
struct A{ protected: struct B{}; }; struct D: A::B, A{};
根据[class.access]/7,我们有:
类似地,使用A :: B作为基本说明符是因为 D是从A派生的,因此必须推迟检查基本说明符 直到看到整个base-specifier-list。
上面的例子和句子是[class.access] / 7的一部分,至少从C ++ 11开始。