https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86908
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> --- This makes the program correct: strategyPtr = new(&strategy) AStrategy; static_cast<BaseStrategy*>(std::launder(&strategy))->doIt(); strategyPtr->doIt();