Hi all, I have a problem finding the right switch to eliminate the compiler to jump over the vtable and calling the wrong virtual function. When allocating a class on the stack and copying a subclass over it virtual functions don't behave as expected. As a pointer the code calls the virtual function of the subclass, but when called directly it always calls the function in the base class. The compiler assumes the pointer to the vtable is to Foo, and then assumes to call Foo::foo() in stead of looking in the object and see the vtable is pointing at Bar and calling Bar::foo. The output of this is: $ ./a.out Foo! Bar! It should be in my opinion: $ ./a.out Bar! Bar! The source is listed below. It is compiled without optimalisations (-O0) Thanks Daan Oosterveld ---- source: #include class Foo { protected: char aap[12]; public: Foo() {} Foo(const Foo & foo) { char * d = (char*)this; char * s = (char*)&foo; for(int i = 0; i < sizeof(Foo); i ++) { d[i] = s[i]; } } virtual void foo() { printf("Foo!\n"); } }; class Bar : public Foo { public: virtual void foo() { printf("Bar!\n"); } }; int main() { Foo foo = Bar(); Foo * bar = &foo; foo.foo(); bar->foo(); }