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;
}
ऊपर कोडएक विरासत वर्चुअल फ़ंक्शन को छुपाने के लिए उपयोग की जाने वाली घोषणा-घोषणा है? जीसीसी का उपयोग कर
level2
level1
देता है, लेकिन आईसीसी में
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;
}
पर विचार तो एक ही वस्तु जब सीधे इस्तेमाल अलग-अलग परिणाम पैदा करता है और जब एक ही प्रकार के एक सूचक के माध्यम से इस्तेमाल किया अलग परिणाम का उत्पादन !!!
मुझे लगता है कि जीसीसी सही है, लेकिन मुझे यकीन नहीं है। –
मजेदार, मैं बस कल इस पर देख रहा था। – aschepler
मैंने टीडीएम मिनजीडब्ल्यू जी ++ 4.4.1 के साथ व्यवहार की पुष्टि की है। यह एक जी ++ बग है, कृपया इसकी रिपोर्ट करें। चीयर्स और एचटी।, –