template<classT1,classD1,classT2,classD2>booloperator==(constunique_ptr<T1,D1>&x,constunique_ptr<T2,D2>&y); (1) (since C++11)
(constexpr since C++23)template<classT1,classD1,classT2,classD2>booloperator!=(constunique_ptr<T1,D1>&x,constunique_ptr<T2,D2>&y); (2) (since C++11)
(until C++20)template<classT1,classD1,classT2,classD2>booloperator<(constunique_ptr<T1,D1>&x,constunique_ptr<T2,D2>&y); (3) (since C++11)
(constexpr since C++26)template<classT1,classD1,classT2,classD2>booloperator<=(constunique_ptr<T1,D1>&x,constunique_ptr<T2,D2>&y); (4) (since C++11)
(constexpr since C++26)template<classT1,classD1,classT2,classD2>booloperator>(constunique_ptr<T1,D1>&x,constunique_ptr<T2,D2>&y); (5) (since C++11)
(constexpr since C++26)template<classT1,classD1,classT2,classD2>booloperator>=(constunique_ptr<T1,D1>&x,constunique_ptr<T2,D2>&y); (6) (since C++11)
(constexpr since C++26)template<classT1,classD1,classT2,classD2>requiresstd::three_way_comparable_with<typenameunique_ptr<T1,D1>::pointer,typenameunique_ptr<T2,D2>::pointer>std::compare_three_way_result_t<typenameunique_ptr<T1,D1>::pointer,typenameunique_ptr<T2,D2>::pointer>operator<=>(constunique_ptr<T1,D1>&x,constunique_ptr<T2,D2>&y); (7) (since C++20)
(constexpr since C++26)template<classT,classD>booloperator==(constunique_ptr<T,D>&x,std::nullptr_t)noexcept; (8) (since C++11)
(constexpr since C++23)template<classT,classD>booloperator==(std::nullptr_t,constunique_ptr<T,D>&x)noexcept; (9) (since C++11)
(until C++20)template<classT,classD>booloperator!=(constunique_ptr<T,D>&x,std::nullptr_t)noexcept; (10) (since C++11)
(until C++20)template<classT,classD>booloperator!=(std::nullptr_t,constunique_ptr<T,D>&x)noexcept; (11) (since C++11)
(until C++20)template<classT,classD>booloperator<(constunique_ptr<T,D>&x,std::nullptr_t); (12) (since C++11)
(constexpr since C++23)template<classT,classD>booloperator<(std::nullptr_t,constunique_ptr<T,D>&y); (13) (since C++11)
(constexpr since C++23)template<classT,classD>booloperator<=(constunique_ptr<T,D>&x,std::nullptr_t); (14) (since C++11)
(constexpr since C++23)template<classT,classD>booloperator<=(std::nullptr_t,constunique_ptr<T,D>&y); (15) (since C++11)
(constexpr since C++23)template<classT,classD>booloperator>(constunique_ptr<T,D>&x,std::nullptr_t); (16) (since C++11)
(constexpr since C++23)template<classT,classD>booloperator>(std::nullptr_t,constunique_ptr<T,D>&y); (17) (since C++11)
(constexpr since C++23)template<classT,classD>booloperator>=(constunique_ptr<T,D>&x,std::nullptr_t); (18) (since C++11)
(constexpr since C++23)template<classT,classD>booloperator>=(std::nullptr_t,constunique_ptr<T,D>&y); (19) (since C++11)
(constexpr since C++23)template<classT,classD>requiresstd::three_way_comparable<typenameunique_ptr<T,D>::pointer>std::compare_three_way_result_t<typenameunique_ptr<T,D>::pointer>operator<=>(constunique_ptr<T,D>&x,std::nullptr_t); (20) (since C++20)
(constexpr since C++23)Compares the pointer values of two unique_ptrs, or a unique_ptr and nullptr.
1-7) Compares two unique_ptrs.
8-20) Compares a unique_ptr and nullptr.
3)std::less<CT>()(x.get(),y.get()), where CT is std::common_type<unique_ptr<T1,D1>::pointer,unique_ptr<T2,D2>::pointer>::type.
20)std::compare_three_way{}(x.get(),static_cast<typenameunique_ptr<T,D>::pointer>(nullptr))
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.