1 //
2 //  sp_unary_addr_test.cpp
3 //
4 //  Copyright (c) 2007 Peter Dimov
5 //
6 // Distributed under the Boost Software License, Version 1.0. (See
7 // accompanying file LICENSE_1_0.txt or copy at
8 // http://www.boost.org/LICENSE_1_0.txt)
9 //
10 
11 #include <boost/shared_ptr.hpp>
12 #include <boost/detail/lightweight_test.hpp>
13 #include <memory>
14 
15 struct deleter
16 {
17 private:
18 
19     void operator& ();
20     void operator& () const;
21 
22 public:
23 
24     int data;
25 
deleterdeleter26     deleter(): data( 17041 )
27     {
28     }
29 
operator ()deleter30     void operator()( void * )
31     {
32     }
33 };
34 
35 struct X
36 {
37 };
38 
main()39 int main()
40 {
41     X x;
42 
43     {
44         boost::shared_ptr<X> p( &x, deleter() );
45 
46         deleter * q = boost::get_deleter<deleter>( p );
47 
48         BOOST_TEST( q != 0 );
49         BOOST_TEST( q != 0 && q->data == 17041 );
50     }
51 
52 #if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, < 1300 )
53 #else
54 
55     {
56         boost::shared_ptr<X> p( &x, deleter(), std::allocator<X>() );
57 
58         deleter * q = boost::get_deleter<deleter>( p );
59 
60         BOOST_TEST( q != 0 );
61         BOOST_TEST( q != 0 && q->data == 17041 );
62     }
63 
64 #endif
65 
66     return boost::report_errors();
67 }
68