http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52972
--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-04-13 17:27:33 UTC --- The standard says "Member functions can be called from a constructor (or destructor) of an abstract class; the effect of making a virtual call to a pure virtual function directly or indirectly for the object being created (or destroyed) from such a constructor (or destructor) is undefined." The program has undefined behaviour, there is no correct or incorrect behaviour for the compiler. Whatever the compiler does with your program does is valid. Including setting fire to your computer.