https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120397
--- Comment #5 from GCC Commits <cvs-commit at gcc dot gnu.org> --- The master branch has been updated by Jonathan Wakely <r...@gcc.gnu.org>: https://gcc.gnu.org/g:3af71d4ac80751afc2f0ef7efdeb07dc18155689 commit r16-1504-g3af71d4ac80751afc2f0ef7efdeb07dc18155689 Author: Jonathan Wakely <jwak...@redhat.com> Date: Thu May 22 15:42:45 2025 +0100 libstdc++: Fix std::uninitialized_value_construct for arrays [PR120397] The std::uninitialized_{value,default}_construct{,_n} algorithms should be able to create arrays, but that currently fails because when an exception happens they clean up using std::_Destroy and in C++17 that doesn't support destroying arrays. (For C++20 and later, std::destroy does handle destroying arrays.) This commit adjusts the _UninitDestroyGuard RAII type used by those algos so that in C++17 mode it recursively destroys each rank of an array type, only using std::_Destroy for the last rank when it's destroying non-array objects. libstdc++-v3/ChangeLog: PR libstdc++/120397 * include/bits/stl_uninitialized.h (_UninitDestroyGuard<I,void>): Add new member function _S_destroy and call it from the destructor (for C++17 only). * testsuite/20_util/specialized_algorithms/uninitialized_default_construct/120397.cc: New test. * testsuite/20_util/specialized_algorithms/uninitialized_value_construct/120397.cc: New test. Reviewed-by: Tomasz KamiÅski <tkami...@redhat.com>