Imported Upstream version 1.64.0
[platform/upstream/boost.git] / libs / smart_ptr / test / auto_ptr_rv_test.cpp
1 #include <boost/config.hpp>
2
3 //
4 //  auto_ptr_rv_test.cpp
5 //
6 //  Copyright (c) 2006 Peter Dimov
7 //
8 // Distributed under the Boost Software License, Version 1.0.
9 // See accompanying file LICENSE_1_0.txt or copy at
10 // http://www.boost.org/LICENSE_1_0.txt
11 //
12
13 #if defined( BOOST_NO_AUTO_PTR )
14
15 int main()
16 {
17 }
18
19 #else
20
21 #include <boost/shared_ptr.hpp>
22 #include <boost/detail/lightweight_test.hpp>
23 #include <memory>
24
25 struct X
26 {
27     static long instances;
28
29     X()
30     {
31         ++instances;
32     }
33
34     ~X()
35     {
36         --instances;
37     }
38
39     static std::auto_ptr<X> create()
40     {
41         return std::auto_ptr<X>( new X );
42     }
43
44 private:
45
46     X( X const & );
47     X & operator=( X const & );
48 };
49
50 long X::instances = 0;
51
52 int main()
53 {
54     BOOST_TEST( X::instances == 0 );
55
56     {
57         boost::shared_ptr<X> p( X::create() );
58         BOOST_TEST( X::instances == 1 );
59
60         p = X::create();
61         BOOST_TEST( X::instances == 1 );
62
63         p.reset();
64         BOOST_TEST( X::instances == 0 );
65
66         p = X::create();
67         BOOST_TEST( X::instances == 1 );
68     }
69
70     BOOST_TEST( X::instances == 0 );
71
72     {
73         boost::shared_ptr<X const> p( X::create() );
74         BOOST_TEST( X::instances == 1 );
75
76         p = X::create();
77         BOOST_TEST( X::instances == 1 );
78
79         p.reset();
80         BOOST_TEST( X::instances == 0 );
81
82         p = X::create();
83         BOOST_TEST( X::instances == 1 );
84     }
85
86     BOOST_TEST( X::instances == 0 );
87
88     {
89         boost::shared_ptr<void> p( X::create() );
90         BOOST_TEST( X::instances == 1 );
91
92         p = X::create();
93         BOOST_TEST( X::instances == 1 );
94
95         p.reset();
96         BOOST_TEST( X::instances == 0 );
97
98         p = X::create();
99         BOOST_TEST( X::instances == 1 );
100     }
101
102     BOOST_TEST( X::instances == 0 );
103
104     {
105         boost::shared_ptr<void const> p( X::create() );
106         BOOST_TEST( X::instances == 1 );
107
108         p = X::create();
109         BOOST_TEST( X::instances == 1 );
110
111         p.reset();
112         BOOST_TEST( X::instances == 0 );
113
114         p = X::create();
115         BOOST_TEST( X::instances == 1 );
116     }
117
118     BOOST_TEST( X::instances == 0 );
119
120     return boost::report_errors();
121 }
122
123 #endif // #if defined( BOOST_NO_AUTO_PTR )