https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89924
--- Comment #9 from Eyal Rozenberg <eyalroz at technion dot ac.il> --- (In reply to Jason Merrill from comment #8) > I think if the object were not an actual Aint, performing the standard > conversion to A* should be undefined, allowing the devirtualization. But > I'm not finding actual wording to that effect in the current draft. I'm not sure you _should_ find such language, because it's unnecessary. A function getting a T* is allowed to assume that the pointer is pointing to a valid T (and if I were a language lawyer I would tell you where that's stated). Implicitly, therefore,, a C++ program is not required to have any defined behavior when that T* does not point to a valid T.