https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119620
--- Comment #8 from GCC Commits <cvs-commit at gcc dot gnu.org> --- The master branch has been updated by Patrick Palka <[email protected]>: https://gcc.gnu.org/g:2a36d22ab52d6ffce9a1fcaf7aca83336679e111 commit r15-9211-g2a36d22ab52d6ffce9a1fcaf7aca83336679e111 Author: Patrick Palka <[email protected]> Date: Fri Apr 4 15:05:09 2025 -0400 libstdc++: Avoid redundant value_type object in flat_set::emplace [PR119620] flat_set::emplace (and flat_multiset's) currently unconditionally constructs an object outside of the container, but if we're passed a value_type object we can and should avoid that. PR libstdc++/119620 libstdc++-v3/ChangeLog: * include/std/flat_set (_Flat_set_impl::_M_try_emplace): Split out into two overloads, one taking at least one argument and one taking zero arguments. Turn __k into an auto&& reference bound to __arg if it's already a value_type and otherwise bound to a lifetime-extended value_type temporary. * testsuite/23_containers/flat_multiset/1.cc (test08): New test. * testsuite/23_containers/flat_set/1.cc (test08): New test. Reviewed-by: Tomasz KamiÅski <[email protected]> Reviewed-by: Jonathan Wakely <[email protected]>
