次のプログラムは、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 (クラン拒否)
- http://melpon.org/wandbox/permlink/N3ORCxG8qnU6Zmeq (GCC 承認)
http://eel.is/c++draft/class.paths#1によると、プログラムは整形式です(したがって、そのclangにはそれを拒否するバグがあります)と思いますが、よくわかりません:
複数の継承グラフを介して複数のパスで名前に到達できる場合、アクセスは、最も多くのアクセスを提供するパスのアクセスになります。