struct level0
{
virtual void foo() = 0;
};
struct level1 : level0
{
virtual void foo() { cout <<" level1 " << endl; }
};
struct level2 : level1
{
virtual void foo() { cout <<" level2 " << endl; }
};
struct level3 : level2
{
using level1::foo;
};
int main()
{
level1* l1 = new level3;
l1->foo();
level3 l3;
l3.foo();
return 0;
}
上記のコード使用してgccが継承された仮想関数を使用する宣言は非表示にする必要がありますか?
level2
level1
を与えるが、ICCに正しいか、それが標準で定義されていない1
level2
level2
いますか?
は編集:これは確かにバグがあることを証明 は、だから、直接使用したのと同じオブジェクトが異なる結果を生成し、同じ型のポインタ経由で使用する場合は、異なる結果を生成し、次の主な機能
int main()
{
level3 l3;
l3.foo(); // This prints level1
level3* pl3 = &l3;
pl3->foo(); // This prints level2
level3& rl3 = l3;
rl3.foo(); // This prints level1
level3& rpl3 = *pl3;
rpl3.foo(); // This prints level2
return 0;
}
を考えます!!!もちろん、レベル1レベル1を取得する
私はGCCが正しいと思いますが、わかりません。 –
おかしい、私は昨日これを調べていた。 – aschepler
TDM MinGW g ++ 4.4.1の動作を確認しました。これはg ++のバグです。報告してください。 Cheers&hth。 –