On Wed, Oct 1, 2025 at 2:47 PM Jonathan Wakely <[email protected]> wrote:
> libstdc++-v3/ChangeLog:
>
> * testsuite/20_util/unique_ptr/modifiers/93562.cc: Define a
> separate deleter for array cases.
> ---
>
> Tested powerpc64le-linux.
>
LGTM.
>
> .../20_util/unique_ptr/modifiers/93562.cc | 25 +++++++++++++++++--
> 1 file changed, 23 insertions(+), 2 deletions(-)
>
> diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/93562.cc
> b/libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/93562.cc
> index 95df7afb9644..044357888ea6 100644
> --- a/libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/93562.cc
> +++ b/libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/93562.cc
> @@ -76,11 +76,32 @@ test03()
> VERIFY(p2.get_deleter().id == -1);
> }
>
> +namespace B
> +{
> + struct Deleter
> + {
> + Deleter& operator=(const Deleter&) = delete;
> +
> + void operator()(int* p) const noexcept { delete[] p; }
> +
> + // found by ADL
> + friend void swap(Deleter& lhs, Deleter& rhs) noexcept
> + { std::swap(lhs.id, rhs.id); }
> +
> + int id;
> + };
> +
> + static_assert(!std::is_move_assignable<Deleter>::value, "not
> assignable");
> +#if __cplusplus >= 201703L
> + static_assert(std::is_swappable_v<Deleter>, "but swappable");
> +#endif
> +} // namespace B
> +
> void
> test04()
> {
> - std::unique_ptr<int[], A::Deleter> p1(new int[1]{1}, { -1 });
> - std::unique_ptr<int[], A::Deleter> p2(new int[2]{2, 2}, { -2 });
> + std::unique_ptr<int[], B::Deleter> p1(new int[1]{1}, { -1 });
> + std::unique_ptr<int[], B::Deleter> p2(new int[2]{2, 2}, { -2 });
> int* const pi1 = p1.get();
> int* const pi2 = p2.get();
> // This type must swappable even though the deleter is not
> move-assignable:
> --
> 2.51.0
>
>