j'ai quelque chose de semblable à cela dans mon code:tables virtuelles sur les classes anonymes
#include <iostream>
#include <cstdlib>
struct Base
{
virtual int Virtual() = 0;
};
struct Child
{
struct : public Base
{
virtual int Virtual() { return 1; }
} First;
struct : public Base
{
virtual int Virtual() { return 2; }
} Second;
};
int main()
{
Child child;
printf("ble: %i\n", ((Base*)&child.First)->Virtual());
printf("ble: %i\n", ((Base*)&child.Second)->Virtual());
system("PAUSE");
return 0;
}
Je me attends ceci pour donner cette sortie:
ble: 1
ble: 2
et il le fait, lorsqu'il est compilé sous GCC (3.4.5 je crois).
Compiler et l'exécution de ce sous Visual Studio 2008 cependant, donne ceci:
ble: 2
ble: 2
Ce qui est intéressant, est que si je donne les noms des structs dérivés de base (struct s1 : public Base
), il fonctionne correctement.
Quel comportement, le cas échéant, est correct? Est-ce que VS est juste en train de se montrer rancunier ou est-ce qu'il respecte la norme? Est-ce que je manque quelque chose de vital ici?
Fonctionne comme attendu dans gcc.Pour être franc, je m'attendais à ne pas le compiler. –
* VS conforme à la norme *? Ha ha ha ha ha ... – wallyk
Hé, VC++ s'est beaucoup amélioré. – GManNickG