[unique.ptr.special] # 20 Memory management library [[mem]](./#mem) ## 20.3 Smart pointers [[smartptr]](smartptr#unique.ptr.special) ### 20.3.1 Unique-ownership pointers [[unique.ptr]](unique.ptr#special) #### 20.3.1.6 Specialized algorithms [unique.ptr.special] [🔗](#lib:swap(unique_ptr&,_unique_ptr&)) `template constexpr void swap(unique_ptr& x, unique_ptr& y) noexcept; ` [1](#1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L3225) *Constraints*: is_swappable_v is true[.](#1.sentence-1) [2](#2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L3229) *Effects*: Calls x.swap(y)[.](#2.sentence-1) [🔗](#lib:operator==,unique_ptr) `template constexpr bool operator==(const unique_ptr& x, const unique_ptr& y); ` [3](#3) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L3241) *Returns*: x.get() == y.get()[.](#3.sentence-1) [🔗](#lib:operator%3c,unique_ptr) `template constexpr bool operator<(const unique_ptr& x, const unique_ptr& y); ` [4](#4) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L3253) Let CT denotecommon_type_t::pointer, typename unique_ptr::pointer> [5](#5) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L3260) *Mandates*: - [(5.1)](#5.1) unique_ptr​::​pointer is implicitly convertible to CT and - [(5.2)](#5.2) unique_ptr​::​pointer is implicitly convertible to CT[.](#5.sentence-1) [6](#6) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L3267) *Preconditions*: The specializationless is a function object type ([[function.objects]](function.objects "22.10 Function objects")) that induces a strict weak ordering ([[alg.sorting]](alg.sorting "26.8 Sorting and related operations")) on the pointer values[.](#6.sentence-1) [7](#7) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L3273) *Returns*: less()(x.get(), y.get())[.](#7.sentence-1) [🔗](#lib:operator%3e,unique_ptr) `template constexpr bool operator>(const unique_ptr& x, const unique_ptr& y); ` [8](#8) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L3285) *Returns*: y < x[.](#8.sentence-1) [🔗](#lib:operator%3c=,unique_ptr) `template constexpr bool operator<=(const unique_ptr& x, const unique_ptr& y); ` [9](#9) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L3297) *Returns*: !(y < x)[.](#9.sentence-1) [🔗](#lib:operator%3e=,unique_ptr) `template constexpr bool operator>=(const unique_ptr& x, const unique_ptr& y); ` [10](#10) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L3309) *Returns*: !(x < y)[.](#10.sentence-1) [🔗](#lib:operator%3c=%3e,unique_ptr) `template requires [three_way_comparable_with](cmp.concept#concept:three_way_comparable_with "17.12.4 Concept three_­way_­comparable [cmp.concept]")::pointer, typename unique_ptr::pointer> constexpr compare_three_way_result_t::pointer, typename unique_ptr::pointer> operator<=>(const unique_ptr& x, const unique_ptr& y); ` [11](#11) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L3325) *Returns*: compare_three_way()(x.get(), y.get())[.](#11.sentence-1) [🔗](#lib:operator==,unique_ptr_) `template constexpr bool operator==(const unique_ptr& x, nullptr_t) noexcept; ` [12](#12) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L3337) *Returns*: !x[.](#12.sentence-1) [🔗](#lib:operator%3c,unique_ptr_) `template constexpr bool operator<(const unique_ptr& x, nullptr_t); template constexpr bool operator<(nullptr_t, const unique_ptr& x); ` [13](#13) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L3351) *Preconditions*: The specialization less​::​pointer> is a function object type ([[function.objects]](function.objects "22.10 Function objects")) that induces a strict weak ordering ([[alg.sorting]](alg.sorting "26.8 Sorting and related operations")) on the pointer values[.](#13.sentence-1) [14](#14) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L3357) *Returns*: The first function template returnsless::pointer>()(x.get(), nullptr) The second function template returnsless::pointer>()(nullptr, x.get()) [🔗](#lib:operator%3e,unique_ptr_) `template constexpr bool operator>(const unique_ptr& x, nullptr_t); template constexpr bool operator>(nullptr_t, const unique_ptr& x); ` [15](#15) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L3378) *Returns*: The first function template returns nullptr < x[.](#15.sentence-1) The second function template returns x < nullptr[.](#15.sentence-2) [🔗](#lib:operator%3c=,unique_ptr_) `template constexpr bool operator<=(const unique_ptr& x, nullptr_t); template constexpr bool operator<=(nullptr_t, const unique_ptr& x); ` [16](#16) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L3393) *Returns*: The first function template returns !(nullptr < x)[.](#16.sentence-1) The second function template returns !(x < nullptr)[.](#16.sentence-2) [🔗](#lib:operator%3e=,unique_ptr_) `template constexpr bool operator>=(const unique_ptr& x, nullptr_t); template constexpr bool operator>=(nullptr_t, const unique_ptr& x); ` [17](#17) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L3408) *Returns*: The first function template returns !(x < nullptr)[.](#17.sentence-1) The second function template returns !(nullptr < x)[.](#17.sentence-2) [🔗](#lib:operator%3c=%3e,unique_ptr_) `template requires [three_way_comparable](cmp.concept#concept:three_way_comparable "17.12.4 Concept three_­way_­comparable [cmp.concept]")::pointer> constexpr compare_three_way_result_t::pointer> operator<=>(const unique_ptr& x, nullptr_t); ` [18](#18) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L3423) *Returns*: compare_three_way()(x.get(), static_cast::pointer>(nullptr)).