https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112335
Bug ID: 112335 Summary: missed optimization on reset and assign unique_ptr Product: gcc Version: 14.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: federico at kircheis dot it Target Milestone: --- Given following snippet ---- #include <memory> struct s{ s(); ~s() noexcept; }; void bar1(std::unique_ptr<s>& ps1, std::unique_ptr<s>& ps2){ ps1.reset(); ps1 = std::move(ps2); } void bar2(std::unique_ptr<s>& ps1, std::unique_ptr<s>& ps2){ ps1 = std::move(ps2); } ---- If I am not mistaken, bar1 and bar2 should have exactly the same behavior, but on https://godbolt.org/z/q4nKsPq7z it is possible to see that the generated code differs.