1 //===----------------------------------------------------------------------===//
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
7 //===----------------------------------------------------------------------===//
13 // weak_ptr& operator=(const weak_ptr& r);
16 #include <type_traits>
20 #include "test_macros.h"
27 B(const B
&) {++count
;}
28 virtual ~B() {--count
;}
39 A(const A
& other
) : B(other
) {++count
;}
48 const std::shared_ptr
<A
> ps(new A
);
49 const std::weak_ptr
<A
> pA(ps
);
53 assert(B::count
== 1);
54 assert(A::count
== 1);
55 assert(pB
.use_count() == 1);
56 assert(pA
.use_count() == 1);
58 assert(pA
.use_count() == 1);
59 assert(B::count
== 1);
60 assert(A::count
== 1);
62 assert(B::count
== 0);
63 assert(A::count
== 0);
66 const std::shared_ptr
<A
> ps(new A
);
67 std::weak_ptr
<A
> pA(ps
);
71 assert(B::count
== 1);
72 assert(A::count
== 1);
73 assert(pB
.use_count() == 1);
75 assert(B::count
== 1);
76 assert(A::count
== 1);
78 assert(B::count
== 0);
79 assert(A::count
== 0);