2 // shared_ptr_move_test.cpp
4 // Copyright (c) 2007 Peter Dimov
6 // Distributed under the Boost Software License, Version 1.0.
7 // See accompanying file LICENSE_1_0.txt or copy at
8 // http://www.boost.org/LICENSE_1_0.txt
11 #include <boost/shared_ptr.hpp>
12 #include <boost/detail/lightweight_test.hpp>
14 #if defined( BOOST_HAS_RVALUE_REFS )
18 static long instances;
33 X & operator=( X const & );
36 long X::instances = 0;
40 BOOST_TEST( X::instances == 0 );
43 boost::shared_ptr<X> p( new X );
44 BOOST_TEST( X::instances == 1 );
46 boost::shared_ptr<X> p2( std::move( p ) );
47 BOOST_TEST( X::instances == 1 );
48 BOOST_TEST( p.get() == 0 );
50 boost::shared_ptr<void> p3( std::move( p2 ) );
51 BOOST_TEST( X::instances == 1 );
52 BOOST_TEST( p2.get() == 0 );
55 BOOST_TEST( X::instances == 0 );
59 boost::shared_ptr<X> p( new X );
60 BOOST_TEST( X::instances == 1 );
62 boost::shared_ptr<X> p2;
64 BOOST_TEST( X::instances == 1 );
65 BOOST_TEST( p.get() == 0 );
67 boost::shared_ptr<void> p3;
69 BOOST_TEST( X::instances == 1 );
70 BOOST_TEST( p2.get() == 0 );
73 BOOST_TEST( X::instances == 0 );
77 boost::shared_ptr<X> p( new X );
78 BOOST_TEST( X::instances == 1 );
80 boost::shared_ptr<X> p2( new X );
81 BOOST_TEST( X::instances == 2 );
83 BOOST_TEST( X::instances == 1 );
84 BOOST_TEST( p.get() == 0 );
86 boost::shared_ptr<void> p3( new X );
87 BOOST_TEST( X::instances == 2 );
89 BOOST_TEST( X::instances == 1 );
90 BOOST_TEST( p2.get() == 0 );
93 BOOST_TEST( X::instances == 0 );
96 return boost::report_errors();
99 #else // !defined( BOOST_HAS_RVALUE_REFS )