下面是純粹學術發明的類層次結構。預期的行爲是什麼?
struct X{
void f1();
void f2();
void f3();
};
struct Y : private X{
void f4();
};
struct Z : X{
};
struct D : Y, Z{
using X::f2;
using Z::X::f3;
};
int main(){}
我預期使用聲明X :: F2不明確爲 'X' 是 'd'(visbility VS X的可接近)的一個不明確的基礎。然而g ++(ideone.com)很好地編譯它。
我使用Online Comeau進行了檢查,發現X :: f2的聲明出現錯誤。但是,它也爲Z :: X :: f3使用聲明提供了不明確的地方。
那麼預期的行爲是什麼?
編輯1:
到標準的相應部分的引用將是有益的,請。
編輯2:
我與2010年VS檢查,它只有與使用聲明X :: F2異議。然而,這不是關於'X'的歧義(例如gcc和Comeau)。這是關於「錯誤C2876:'X':並非所有重載都可訪問」。
編輯3:
struct X{
void f(){}
};
struct Y : X{
struct trouble{
void f(){}
};
};
struct trouble : X{
};
struct letscheck : Y, trouble{
using trouble::f;
};
int main(){}
在這裏,我試圖(故意)與使用聲明類型創建一個問題。海灣合作委員會仍然編譯這個罰款,VS2010也是如此。 Comeau仍然給出了錯誤(如預期的)關於模棱兩可的類型'麻煩'。按照初步查詢的解釋,看來GCC和VS2010是錯誤的。那是對的嗎?
在D添加一個方法,調用f2()看看會發生什麼。 – 2010-08-23 15:00:18