11
このサンプルコードでは、同じ静的変数を示す2つの文があります。最初のものはあいまいさを与えませんが、2番目のものはなぜですか?完全修飾静的メンバー変数のあいまいさ
#include <iostream>
using namespace std;
struct A { static const char a = 'a'; };
struct B : public A { };
struct C : public A { };
struct G : public B, public C { };
int main()
{
G v;
cout << G::B::A::a << endl;
cout << v.B::A::a << endl;
}
GCCエラー(いくつかのコメントによると、打ち鳴らすにはあいまいさがありません):
main.cpp:15:18: error: 'A' is an ambiguous base of 'G'
cout << v.B::A::a << endl;
私はこのようなものを1カ月ほど前に見たことがわかります。私はそれが 'v'の場合にどの親を使うべきかを知らないと信じています。それを見つけようとしています。 – NathanOliver
@barakmanosまさに、私は仮想継承を必要としないケースを研究しています。 –
これはclangで正常にコンパイルされます。 – interjay