https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87431
--- Comment #12 from Jonathan Wakely <redi at gcc dot gnu.org> --- Yeah that unconditional move might actually be more expensive than just constructing directly. E.g. if the move constructor isn't really cheap, or if it will memcpy a large object. If an exception is rare in practice, then it might be better to "risk" the exception by constructing directly. It's a trade off.