1 //
2 // local_sp_fn_test.cpp
3 //
4 // Copyright 2017 Peter Dimov
5 //
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
9 //
10 
11 #include <boost/smart_ptr/local_shared_ptr.hpp>
12 #include <boost/weak_ptr.hpp>
13 #include <boost/core/lightweight_test.hpp>
14 
f()15 static void f()
16 {
17 }
18 
19 struct null_deleter
20 {
operator ()null_deleter21     template<class Y> void operator()( Y* ) {}
22 };
23 
main()24 int main()
25 {
26     boost::local_shared_ptr<void()> pf( f, null_deleter() );
27 
28     BOOST_TEST( pf.get() == f );
29     BOOST_TEST_EQ( pf.local_use_count(), 1 );
30     BOOST_TEST( boost::get_deleter<null_deleter>( pf ) != 0 );
31 
32     boost::weak_ptr<void()> wp( pf );
33 
34     BOOST_TEST( wp.lock().get() == f );
35     BOOST_TEST_EQ( wp.use_count(), 1 );
36 
37     pf.reset();
38 
39     BOOST_TEST( wp.lock().get() == 0 );
40     BOOST_TEST_EQ( wp.use_count(), 0 );
41 
42     return boost::report_errors();
43 }
44