Files
gcc/libstdc++-v3/include
Jonathan Wakely 3af71d4ac8 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 <tkaminsk@redhat.com>
2025-06-13 16:35:20 +01:00
..
2025-01-02 11:59:57 +01:00
2025-01-02 11:59:57 +01:00
2025-01-02 11:59:57 +01:00
2025-01-02 11:59:57 +01:00
2025-01-02 11:59:57 +01:00