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 
main()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 
XX29     X()
30     {
31         ++instances;
32     }
33 
~XX34     ~X()
35     {
36         --instances;
37     }
38 
createX39     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 
main()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 )
124