]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/core/test/to_address_test.cpp
bump version to 18.2.4-pve3
[ceph.git] / ceph / src / boost / libs / core / test / to_address_test.cpp
1 /*
2 Copyright 2017-2018 Glen Joseph Fernandes
3 (glenjofe@gmail.com)
4
5 Distributed under the Boost Software License, Version 1.0.
6 (http://www.boost.org/LICENSE_1_0.txt)
7 */
8 #include <boost/core/pointer_traits.hpp>
9 #include <boost/core/lightweight_test.hpp>
10
11 template<class T>
12 class P1 {
13 public:
14 explicit P1(T* p)
15 : p_(p) { }
16
17 T* operator->() const BOOST_NOEXCEPT {
18 return p_;
19 }
20
21 private:
22 T* p_;
23 };
24
25 template<class T>
26 class P2 {
27 public:
28 explicit P2(T* p)
29 : p_(p) { }
30
31 P1<T> operator->() const BOOST_NOEXCEPT {
32 return p_;
33 }
34
35 private:
36 P1<T> p_;
37 };
38
39 #if !defined(BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION)
40 template<class T>
41 class P3 {
42 public:
43 explicit P3(T* p)
44 : p_(p) { }
45
46 T* get() const BOOST_NOEXCEPT {
47 return p_;
48 }
49
50 private:
51 T* p_;
52 };
53
54 namespace boost {
55
56 template<class T>
57 struct pointer_traits<P3<T> > {
58 static T* to_address(const P3<T>& p) BOOST_NOEXCEPT {
59 return p.get();
60 }
61 };
62
63 } /* boost */
64
65 template<class T>
66 class P4 {
67 public:
68 explicit P4(T* p)
69 : p_(p) { }
70
71 T* operator->() const BOOST_NOEXCEPT {
72 return 0;
73 }
74
75 T* get() const BOOST_NOEXCEPT {
76 return p_;
77 }
78
79 private:
80 int* p_;
81 };
82
83 namespace boost {
84
85 template<class T>
86 struct pointer_traits<P4<T> > {
87 static T* to_address(const P4<T>& p) BOOST_NOEXCEPT {
88 return p.get();
89 }
90 };
91
92 } /* boost */
93 #endif
94
95 int main()
96 {
97 int i = 0;
98 BOOST_TEST(boost::to_address(&i) == &i);
99 int* p = &i;
100 BOOST_TEST(boost::to_address(p) == &i);
101 P1<int> p1(&i);
102 BOOST_TEST(boost::to_address(p1) == &i);
103 P2<int> p2(&i);
104 BOOST_TEST(boost::to_address(p2) == &i);
105 #if !defined(BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION)
106 P3<int> p3(&i);
107 BOOST_TEST(boost::to_address(p3) == &i);
108 P4<int> p4(&i);
109 BOOST_TEST(boost::to_address(p4) == &i);
110 #endif
111 return boost::report_errors();
112 }