que tienen algo similar a esto en mi código:tablas virtuales en clases anónimas
#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;
}
yo esperaría que esto da este resultado:
ble: 1
ble: 2
y lo hace, cuando se compila bajo GCC (3.4.5 Yo creo).
Compilación y ejecución de este en Visual Studio 2008, sin embargo, da esto:
ble: 2
ble: 2
Lo que es interesante, es que si doy los nombres structs Base derivados (struct s1 : public Base
), funciona correctamente.
¿Qué comportamiento, en su caso, es correcto? ¿VS simplemente es priestrado o se está apegando al estándar? ¿Me estoy perdiendo algo vital aquí?
Funciona como se espera en gcc.Aunque para ser franco estaba esperando que no compilara. –
* VS se adhiere al estándar *? Ja, ja, ja, ja ... – wallyk
Oye, VC++ ha mejorado mucho en eso. – GManNickG