1 //===----------------------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 // <memory> 10 11 // shared_ptr 12 13 // template <class T> 14 // bool operator==(const shared_ptr<T>& x, nullptr_t) noexcept; 15 // template <class T> 16 // bool operator==(nullptr_t, const shared_ptr<T>& y) noexcept; 17 // template <class T> 18 // bool operator!=(const shared_ptr<T>& x, nullptr_t) noexcept; 19 // template <class T> 20 // bool operator!=(nullptr_t, const shared_ptr<T>& y) noexcept; 21 // template <class T> 22 // bool operator<(const shared_ptr<T>& x, nullptr_t) noexcept; 23 // template <class T> 24 // bool operator<(nullptr_t, const shared_ptr<T>& y) noexcept; 25 // template <class T> 26 // bool operator<=(const shared_ptr<T>& x, nullptr_t) noexcept; 27 // template <class T> 28 // bool operator<=(nullptr_t, const shared_ptr<T>& y) noexcept; 29 // template <class T> 30 // bool operator>(const shared_ptr<T>& x, nullptr_t) noexcept; 31 // template <class T> 32 // bool operator>(nullptr_t, const shared_ptr<T>& y) noexcept; 33 // template <class T> 34 // bool operator>=(const shared_ptr<T>& x, nullptr_t) noexcept; 35 // template <class T> 36 // bool operator>=(nullptr_t, const shared_ptr<T>& y) noexcept; 37 // template<class T> 38 // strong_ordering operator<=>(shared_ptr<T> const& x, nullptr_t) noexcept; // C++20 39 40 #include <cassert> 41 #include <cstddef> 42 #include <memory> 43 44 #include "test_macros.h" 45 #include "test_comparisons.h" 46 47 void do_nothing(int*) {} 48 49 int main(int, char**) 50 { 51 AssertComparisonsAreNoexcept<std::shared_ptr<int>, nullptr_t>(); 52 AssertComparisonsAreNoexcept<nullptr_t, std::shared_ptr<int> >(); 53 AssertComparisonsReturnBool<std::shared_ptr<int>, nullptr_t>(); 54 AssertComparisonsReturnBool<nullptr_t, std::shared_ptr<int> >(); 55 #if TEST_STD_VER >= 20 56 AssertOrderAreNoexcept<std::shared_ptr<int>>(); 57 AssertOrderReturn<std::strong_ordering, std::shared_ptr<int>>(); 58 #endif 59 60 const std::shared_ptr<int> p1(new int(1)); 61 assert(!(p1 == nullptr)); 62 assert(!(nullptr == p1)); 63 assert(!(p1 < nullptr)); 64 assert((nullptr < p1)); 65 assert(!(p1 <= nullptr)); 66 assert((nullptr <= p1)); 67 assert((p1 > nullptr)); 68 assert(!(nullptr > p1)); 69 assert((p1 >= nullptr)); 70 assert(!(nullptr >= p1)); 71 #if TEST_STD_VER >= 20 72 assert((nullptr <=> p1) == std::strong_ordering::less); 73 assert((p1 <=> nullptr) == std::strong_ordering::greater); 74 #endif 75 76 const std::shared_ptr<int> p2; 77 assert((p2 == nullptr)); 78 assert((nullptr == p2)); 79 assert(!(p2 < nullptr)); 80 assert(!(nullptr < p2)); 81 assert((p2 <= nullptr)); 82 assert((nullptr <= p2)); 83 assert(!(p2 > nullptr)); 84 assert(!(nullptr > p2)); 85 assert((p2 >= nullptr)); 86 assert((nullptr >= p2)); 87 #if TEST_STD_VER >= 20 88 assert((p2 <=> nullptr) == std::strong_ordering::equivalent); 89 assert((nullptr <=> p2) == std::strong_ordering::equivalent); 90 #endif 91 92 #if TEST_STD_VER >= 17 93 const std::shared_ptr<int[]> p3(new int[1]); 94 assert(!(p3 == nullptr)); 95 assert(!(nullptr == p3)); 96 assert(!(p3 < nullptr)); 97 assert((nullptr < p3)); 98 assert(!(p3 <= nullptr)); 99 assert((nullptr <= p3)); 100 assert((p3 > nullptr)); 101 assert(!(nullptr > p3)); 102 assert((p3 >= nullptr)); 103 assert(!(nullptr >= p3)); 104 # if TEST_STD_VER >= 20 105 assert((p3 <=> nullptr) == std::strong_ordering::greater); 106 assert((nullptr <=> p3) == std::strong_ordering::less); 107 # endif 108 109 const std::shared_ptr<int[]> p4; 110 assert((p4 == nullptr)); 111 assert((nullptr == p4)); 112 assert(!(p4 < nullptr)); 113 assert(!(nullptr < p4)); 114 assert((p4 <= nullptr)); 115 assert((nullptr <= p4)); 116 assert(!(p4 > nullptr)); 117 assert(!(nullptr > p4)); 118 assert((p4 >= nullptr)); 119 assert((nullptr >= p4)); 120 # if TEST_STD_VER >= 20 121 assert((p4 <=> nullptr) == std::strong_ordering::equivalent); 122 assert((nullptr <=> p4) == std::strong_ordering::equivalent); 123 # endif 124 #endif 125 126 return 0; 127 } 128