1// Copyright 2011, 2020 Peter Dimov
2// Distributed under the Boost Software License, Version 1.0.
3// https://www.boost.org/LICENSE_1_0.txt
4
5#include <boost/weak_ptr.hpp>
6#include <boost/shared_ptr.hpp>
7#include <boost/core/lightweight_test.hpp>
8#include <boost/config.hpp>
9#include <functional>
10
11#if defined(BOOST_NO_CXX11_HDR_FUNCTIONAL)
12
13int main() {}
14
15#else
16
17int main()
18{
19 {
20 boost::shared_ptr<int> p1, p2( new int );
21 boost::weak_ptr<int> q1( p1 ), q2( p2 ), q3;
22
23 BOOST_TEST_EQ( std::hash< boost::weak_ptr<int> >()( q1 ), q1.owner_hash_value() );
24 BOOST_TEST_EQ( std::hash< boost::weak_ptr<int> >()( q2 ), q2.owner_hash_value() );
25 BOOST_TEST_EQ( std::hash< boost::weak_ptr<int> >()( q3 ), q3.owner_hash_value() );
26
27 p2.reset();
28
29 BOOST_TEST_EQ( std::hash< boost::weak_ptr<int> >()( q2 ), q2.owner_hash_value() );
30 }
31
32 {
33 boost::shared_ptr<int[]> p1, p2( new int[1] );
34 boost::weak_ptr<int[]> q1( p1 ), q2( p2 ), q3;
35
36 BOOST_TEST_EQ( std::hash< boost::weak_ptr<int[]> >()( q1 ), q1.owner_hash_value() );
37 BOOST_TEST_EQ( std::hash< boost::weak_ptr<int[]> >()( q2 ), q2.owner_hash_value() );
38 BOOST_TEST_EQ( std::hash< boost::weak_ptr<int[]> >()( q3 ), q3.owner_hash_value() );
39
40 p2.reset();
41
42 BOOST_TEST_EQ( std::hash< boost::weak_ptr<int[]> >()( q2 ), q2.owner_hash_value() );
43 }
44
45 {
46 boost::shared_ptr<int[1]> p1, p2( new int[1] );
47 boost::weak_ptr<int[1]> q1( p1 ), q2( p2 ), q3;
48
49 BOOST_TEST_EQ( std::hash< boost::weak_ptr<int[1]> >()( q1 ), q1.owner_hash_value() );
50 BOOST_TEST_EQ( std::hash< boost::weak_ptr<int[1]> >()( q2 ), q2.owner_hash_value() );
51 BOOST_TEST_EQ( std::hash< boost::weak_ptr<int[1]> >()( q3 ), q3.owner_hash_value() );
52
53 p2.reset();
54
55 BOOST_TEST_EQ( std::hash< boost::weak_ptr<int[1]> >()( q2 ), q2.owner_hash_value() );
56 }
57
58 return boost::report_errors();
59}
60
61#endif // #if defined(BOOST_NO_CXX11_HDR_FUNCTIONAL)
62

source code of boost/libs/smart_ptr/test/wp_hash_test2.cpp