https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112591
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> --- Ughhhhhhhh. The C++20 behaviour is correct, but fixing it for C++17 is an ABI change. I think we need to do it though. It should work to change the C++17 variant to use a union of __aligned_membuf<Empty> and Empty, and then just ignore the latter (or maybe we can use the C++20 impl for C++17 too?) This is a more general problem with __aligned_membuf, it's just that std::variant is probably the only place you can trigger it, because you can't have a data member of types such as _Rb_tree_node<Empty>. We could change aligned_membuf to use a union internally, so that anything using aligned_membuf avoids having the same problem.