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;
}
der obige Code mit gcc ergibt
level2
level1
aber in icc gibt
level2
level2
Welches ist richtig, oder ist es in der Norm nicht definiert?
Bearbeiten: Dies beweist, dass es sich um einen Fehler handelt, betrachten Sie die folgende Hauptfunktion
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;
}
Also das gleiche Objekt, wenn direkt verwendet produziert unterschiedliche Ergebnisse und wenn über einen Zeiger des gleichen Typs verwendet produziert unterschiedliche Ergebnisse!!!
0 Stimmen
Ich würde vermuten, dass GCC richtig ist, aber ich bin mir nicht sicher.
0 Stimmen
Ich habe das Verhalten mit TDM MinGW g++ 4.4.1 bestätigt. Es ist ein G++-Fehler, bitte melden Sie ihn. Prost & hth.,
0 Stimmen
Komisch, ich habe mir das erst gestern angesehen.
0 Stimmen
Dies wurde in GCC 4.8 behoben.