1//===----------------------------------------------------------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is dual licensed under the MIT and the University of Illinois Open 6// Source Licenses. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10// <memory> 11 12// unique_ptr 13 14// template <class T1, class D1, class T2, class D2> 15// bool 16// operator< (const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>& y); 17 18// template <class T1, class D1, class T2, class D2> 19// bool 20// operator> (const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>& y); 21 22// template <class T1, class D1, class T2, class D2> 23// bool 24// operator<=(const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>& y); 25 26// template <class T1, class D1, class T2, class D2> 27// bool 28// operator>=(const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>& y); 29 30#include <memory> 31#include <cassert> 32 33#include "../deleter.h" 34 35struct A 36{ 37 static int count; 38 A() {++count;} 39 A(const A&) {++count;} 40 virtual ~A() {--count;} 41}; 42 43int A::count = 0; 44 45struct B 46 : public A 47{ 48 static int count; 49 B() {++count;} 50 B(const B&) {++count;} 51 virtual ~B() {--count;} 52}; 53 54int B::count = 0; 55 56int main() 57{ 58 { 59 const std::unique_ptr<A, Deleter<A> > p1(new A); 60 const std::unique_ptr<A, Deleter<A> > p2(new A); 61 assert((p1 < p2) == !(p1 > p2)); 62 assert((p1 < p2) == (p1 <= p2)); 63 assert((p1 < p2) == !(p1 >= p2)); 64 } 65 { 66 const std::unique_ptr<A, Deleter<A> > p1(new A); 67 const std::unique_ptr<B, Deleter<B> > p2(new B); 68 assert((p1 < p2) == !(p1 > p2)); 69 assert((p1 < p2) == (p1 <= p2)); 70 assert((p1 < p2) == !(p1 >= p2)); 71 } 72 { 73 const std::unique_ptr<A[], Deleter<A[]> > p1(new A[3]); 74 const std::unique_ptr<A[], Deleter<A[]> > p2(new A[3]); 75 assert((p1 < p2) == !(p1 > p2)); 76 assert((p1 < p2) == (p1 <= p2)); 77 assert((p1 < p2) == !(p1 >= p2)); 78 } 79 { 80 const std::unique_ptr<A[], Deleter<A[]> > p1(new A[3]); 81 const std::unique_ptr<B[], Deleter<B[]> > p2(new B[3]); 82 assert((p1 < p2) == !(p1 > p2)); 83 assert((p1 < p2) == (p1 <= p2)); 84 assert((p1 < p2) == !(p1 >= p2)); 85 } 86 { 87 const std::unique_ptr<A, Deleter<A> > p1; 88 const std::unique_ptr<A, Deleter<A> > p2; 89 assert((p1 < p2) == (p1 > p2)); 90 assert((p1 < p2) == !(p1 <= p2)); 91 assert((p1 < p2) == !(p1 >= p2)); 92 } 93 { 94 const std::unique_ptr<A, Deleter<A> > p1; 95 const std::unique_ptr<B, Deleter<B> > p2; 96 assert((p1 < p2) == (p1 > p2)); 97 assert((p1 < p2) == !(p1 <= p2)); 98 assert((p1 < p2) == !(p1 >= p2)); 99 } 100} 101