https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109442
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> --- Ah, maybe the problem is that the library code manually elides destroying the elements, precisely because it's a no-op. So we don't actually destroy the elements, which means the compiler might think they're still initialized and so could be inspected. If the library explicitly does vec[i].~T() for every i then would that help? The compiler would know there are no valid elements in the storage, and so nothing operator delete could inspect. We could continue to elide destroying the elements when !defined __OPTIMIZE__ so that we don't run a loop that does nothing, but with optimization enabled rely on the compiler to remove that loop.