https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93413
--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> --- The problem is the default Destructor in the Derived for the other examples. So this can be reduced to just: struct Base { constexpr virtual ~Base() = default; }; constexpr Base b;