https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107085
--- Comment #10 from Marek Polacek <mpolacek at gcc dot gnu.org> --- Even more simplified: struct X { virtual void f(); }; struct Z : X {}; constexpr X x = X(Z()); I guess we shouldn't try to force_elide X::X(X&&) here because X is a potentially-overlapping subobject.