根据 c++ 标准,以下程序是格式正确的还是格式错误的?
struct A { protected: static const int x = 0; };
struct B : A {};
struct C : A { using A::x; };
struct D : B, C {};
int main() { D::x; }
不同的编译器给出不同的结果。Clang 拒绝它而 GCC 接受它:
- http://melpon.org/wandbox/permlink/SqSEtcYaR72A4eNS(Clang拒绝)
- http://melpon.org/wandbox/permlink/N3ORCxG8qnU6Zmeq(GCC接受)
我认为http://eel.is/c++draft/class.paths#1的程序格式正确(因此 clang 有拒绝它的错误) ,但我不确定:
如果可以通过多重继承图通过多个路径访问一个名称,则访问权限是提供最多访问权限的路径。