C
Christopher Benson-Manica
Does the following code exhibit undefined behavior?
#include <stdio.h>
class A
{
virtual int quux()=0;
};
class B : public A
{
int quux() {return(1);}
public:
unsigned int foo;
};
class C: public A
{
int quux() {return(0);}
public:
const char *bar;
};
void baz( const A &a )
{
((B*)&a)->foo=3; /* a is a C, not a B */
/* Prints 3, 00000000 */
printf( "%u, %p\n", ((B*)&a)->foo, (void *)dynamic_cast<const B*>(&a)) );
}
int main()
{
C b;
baz( b );
return 0;
}
#include <stdio.h>
class A
{
virtual int quux()=0;
};
class B : public A
{
int quux() {return(1);}
public:
unsigned int foo;
};
class C: public A
{
int quux() {return(0);}
public:
const char *bar;
};
void baz( const A &a )
{
((B*)&a)->foo=3; /* a is a C, not a B */
/* Prints 3, 00000000 */
printf( "%u, %p\n", ((B*)&a)->foo, (void *)dynamic_cast<const B*>(&a)) );
}
int main()
{
C b;
baz( b );
return 0;
}