https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108216
--- Comment #3 from Thiago Macieira <thiago at kde dot org> --- In bug 70644, the pointer to Base was passed to Base's constructor, so the conversion from the derived type to the virtual base Base happened clearly before said base was constructed. In this example here, the conversion happens inside C's constructor body, where C's direct (but virtual) base A must be fully initialised, notwithstanding the fact that it was initialised by D's in-charge constructor. I'm not making a conclusion that this is or isn't UB. I'm saying that it can't be UB for the explanation offered in that bug.