eq.pass.cpp 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. // <memory>
  9. // unique_ptr
  10. // template <class T1, class D1, class T2, class D2>
  11. // bool
  12. // operator==(const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>& y);
  13. // template <class T1, class D1, class T2, class D2>
  14. // bool
  15. // operator!=(const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>& y);
  16. #include <memory>
  17. #include <cassert>
  18. #include "test_macros.h"
  19. #include "deleter_types.h"
  20. struct A
  21. {
  22. static int count;
  23. A() {++count;}
  24. A(const A&) {++count;}
  25. virtual ~A() {--count;}
  26. };
  27. int A::count = 0;
  28. struct B
  29. : public A
  30. {
  31. static int count;
  32. B() {++count;}
  33. B(const B&) {++count;}
  34. virtual ~B() {--count;}
  35. };
  36. int B::count = 0;
  37. int main(int, char**)
  38. {
  39. {
  40. const std::unique_ptr<A, Deleter<A> > p1(new A);
  41. const std::unique_ptr<A, Deleter<A> > p2(new A);
  42. assert(!(p1 == p2));
  43. assert(p1 != p2);
  44. }
  45. {
  46. const std::unique_ptr<A, Deleter<A> > p1(new A);
  47. const std::unique_ptr<B, Deleter<B> > p2(new B);
  48. assert(!(p1 == p2));
  49. assert(p1 != p2);
  50. }
  51. {
  52. const std::unique_ptr<A[], Deleter<A[]> > p1(new A[3]);
  53. const std::unique_ptr<A[], Deleter<A[]> > p2(new A[3]);
  54. assert(!(p1 == p2));
  55. assert(p1 != p2);
  56. }
  57. {
  58. const std::unique_ptr<A[], Deleter<A[]> > p1(new A[3]);
  59. const std::unique_ptr<B[], Deleter<B[]> > p2(new B[3]);
  60. assert(!(p1 == p2));
  61. assert(p1 != p2);
  62. }
  63. {
  64. const std::unique_ptr<A, Deleter<A> > p1;
  65. const std::unique_ptr<A, Deleter<A> > p2;
  66. assert(p1 == p2);
  67. assert(!(p1 != p2));
  68. }
  69. {
  70. const std::unique_ptr<A, Deleter<A> > p1;
  71. const std::unique_ptr<B, Deleter<B> > p2;
  72. assert(p1 == p2);
  73. assert(!(p1 != p2));
  74. }
  75. return 0;
  76. }