//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // shared_ptr // template bool operator==(const shared_ptr& a, const shared_ptr& b); // template bool operator!=(const shared_ptr& a, const shared_ptr& b); // template bool operator< (const shared_ptr& a, const shared_ptr& b); // template bool operator<=(const shared_ptr& a, const shared_ptr& b); // template bool operator> (const shared_ptr& a, const shared_ptr& b); // template bool operator>=(const shared_ptr& a, const shared_ptr& b); // template // requires three_way_comparable_with::pointer, // typename unique_ptr::pointer> // compare_three_way_result_t::pointer, // typename unique_ptr::pointer> // operator<=>(const unique_ptr& x, const unique_ptr& y); #include #include #include "test_macros.h" #include "test_comparisons.h" void do_nothing(int*) {} int main(int, char**) { AssertComparisonsAreNoexcept >(); AssertComparisonsReturnBool >(); #if TEST_STD_VER > 17 AssertOrderAreNoexcept>(); AssertOrderReturn>(); #endif int* ptr1(new int); int* ptr2(new int); const std::shared_ptr p1(ptr1); const std::shared_ptr p2(ptr2); assert(!(p1 == p2)); assert(p1 != p2); assert((p1 < p2) == (ptr1 < ptr2)); assert((p1 <= p2) == (ptr1 <= ptr2)); assert((p1 > p2) == (ptr1 > ptr2)); assert((p1 >= p2) == (ptr1 >= ptr2)); #if TEST_STD_VER > 17 assert((p1 <=> p2) != std::strong_ordering::equal); assert((p1 <=> p2) == (ptr1 <=> ptr2)); #endif // The deleter does not influence the comparisons // of the `shared_ptr` const std::shared_ptr p3(ptr2, do_nothing); assert(p2 == p3); assert(!(p1 == p3)); assert(!(p2 != p3)); assert(p1 != p3); assert((p1 < p3) == (ptr1 < ptr2)); assert((p1 <= p3) == (ptr1 <= ptr2)); assert((p1 > p3) == (ptr1 > ptr2)); assert((p1 >= p3) == (ptr1 >= ptr2)); #if TEST_STD_VER > 17 assert((p2 <=> p3) == std::strong_ordering::equal); assert((p1 <=> p3) != std::strong_ordering::equal); assert((p1 <=> p3) == (ptr1 <=> ptr2)); #endif return 0; }