diff --git a/AK/NonnullRefPtr.h b/AK/NonnullRefPtr.h index 46686927e9..a30a3c96bc 100644 --- a/AK/NonnullRefPtr.h +++ b/AK/NonnullRefPtr.h @@ -267,6 +267,12 @@ inline const LogStream& operator<<(const LogStream& stream, const NonnullRefPtr< return stream << value.ptr(); } +template +inline void swap(NonnullRefPtr& a, NonnullRefPtr& b) +{ + a.swap(b); +} + } using AK::adopt; diff --git a/AK/Tests/TestNonnullRefPtr.cpp b/AK/Tests/TestNonnullRefPtr.cpp index a8c77ae1ea..1cd183c0e3 100644 --- a/AK/Tests/TestNonnullRefPtr.cpp +++ b/AK/Tests/TestNonnullRefPtr.cpp @@ -73,4 +73,11 @@ TEST_CASE(assign_owner_of_self) EXPECT_EQ(child->ref_count(), 1); } +TEST_CASE(swap_with_self) +{ + auto object = adopt(*new Object); + swap(object, object); + EXPECT_EQ(object->ref_count(), 1); +} + TEST_MAIN(String)