1#include <boost/config.hpp>
2#include <boost/config/pragma_message.hpp>
3
4#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
5
6BOOST_PRAGMA_MESSAGE( "Skipping test because BOOST_NO_CXX11_RVALUE_REFERENCES is defined" )
7int main() {}
8
9#elif defined(BOOST_NO_CXX11_SMART_PTR)
10
11BOOST_PRAGMA_MESSAGE( "Skipping test because BOOST_NO_CXX11_SMART_PTR is defined" )
12int main() {}
13
14#elif defined(BOOST_GCC) && BOOST_GCC < 40600
15
16BOOST_PRAGMA_MESSAGE( "Skipping test because BOOST_GCC is less than 40600" )
17int main() {}
18
19#else
20
21//
22// bind_unique_ptr_test.cpp
23//
24// Copyright (c) 2015 Peter Dimov
25//
26// Distributed under the Boost Software License, Version 1.0.
27// See accompanying file LICENSE_1_0.txt or copy at
28// http://www.boost.org/LICENSE_1_0.txt
29//
30
31#include <boost/bind/bind.hpp>
32#include <boost/core/lightweight_test.hpp>
33#include <memory>
34
35using namespace boost::placeholders;
36
37//
38
39void fv1( std::unique_ptr<int> p1 )
40{
41 BOOST_TEST( *p1 == 1 );
42}
43
44void fv2( std::unique_ptr<int> p1, std::unique_ptr<int> p2 )
45{
46 BOOST_TEST( *p1 == 1 );
47 BOOST_TEST( *p2 == 2 );
48}
49
50void fv3( std::unique_ptr<int> p1, std::unique_ptr<int> p2, std::unique_ptr<int> p3 )
51{
52 BOOST_TEST( *p1 == 1 );
53 BOOST_TEST( *p2 == 2 );
54 BOOST_TEST( *p3 == 3 );
55}
56
57void fv4( std::unique_ptr<int> p1, std::unique_ptr<int> p2, std::unique_ptr<int> p3, std::unique_ptr<int> p4 )
58{
59 BOOST_TEST( *p1 == 1 );
60 BOOST_TEST( *p2 == 2 );
61 BOOST_TEST( *p3 == 3 );
62 BOOST_TEST( *p4 == 4 );
63}
64
65void fv5( std::unique_ptr<int> p1, std::unique_ptr<int> p2, std::unique_ptr<int> p3, std::unique_ptr<int> p4, std::unique_ptr<int> p5 )
66{
67 BOOST_TEST( *p1 == 1 );
68 BOOST_TEST( *p2 == 2 );
69 BOOST_TEST( *p3 == 3 );
70 BOOST_TEST( *p4 == 4 );
71 BOOST_TEST( *p5 == 5 );
72}
73
74void fv6( std::unique_ptr<int> p1, std::unique_ptr<int> p2, std::unique_ptr<int> p3, std::unique_ptr<int> p4, std::unique_ptr<int> p5, std::unique_ptr<int> p6 )
75{
76 BOOST_TEST( *p1 == 1 );
77 BOOST_TEST( *p2 == 2 );
78 BOOST_TEST( *p3 == 3 );
79 BOOST_TEST( *p4 == 4 );
80 BOOST_TEST( *p5 == 5 );
81 BOOST_TEST( *p6 == 6 );
82}
83
84void fv7( std::unique_ptr<int> p1, std::unique_ptr<int> p2, std::unique_ptr<int> p3, std::unique_ptr<int> p4, std::unique_ptr<int> p5, std::unique_ptr<int> p6, std::unique_ptr<int> p7 )
85{
86 BOOST_TEST( *p1 == 1 );
87 BOOST_TEST( *p2 == 2 );
88 BOOST_TEST( *p3 == 3 );
89 BOOST_TEST( *p4 == 4 );
90 BOOST_TEST( *p5 == 5 );
91 BOOST_TEST( *p6 == 6 );
92 BOOST_TEST( *p7 == 7 );
93}
94
95void fv8( std::unique_ptr<int> p1, std::unique_ptr<int> p2, std::unique_ptr<int> p3, std::unique_ptr<int> p4, std::unique_ptr<int> p5, std::unique_ptr<int> p6, std::unique_ptr<int> p7, std::unique_ptr<int> p8 )
96{
97 BOOST_TEST( *p1 == 1 );
98 BOOST_TEST( *p2 == 2 );
99 BOOST_TEST( *p3 == 3 );
100 BOOST_TEST( *p4 == 4 );
101 BOOST_TEST( *p5 == 5 );
102 BOOST_TEST( *p6 == 6 );
103 BOOST_TEST( *p7 == 7 );
104 BOOST_TEST( *p8 == 8 );
105}
106
107void fv9( std::unique_ptr<int> p1, std::unique_ptr<int> p2, std::unique_ptr<int> p3, std::unique_ptr<int> p4, std::unique_ptr<int> p5, std::unique_ptr<int> p6, std::unique_ptr<int> p7, std::unique_ptr<int> p8, std::unique_ptr<int> p9 )
108{
109 BOOST_TEST( *p1 == 1 );
110 BOOST_TEST( *p2 == 2 );
111 BOOST_TEST( *p3 == 3 );
112 BOOST_TEST( *p4 == 4 );
113 BOOST_TEST( *p5 == 5 );
114 BOOST_TEST( *p6 == 6 );
115 BOOST_TEST( *p7 == 7 );
116 BOOST_TEST( *p8 == 8 );
117 BOOST_TEST( *p9 == 9 );
118}
119
120void test()
121{
122 {
123 std::unique_ptr<int> p1( new int(1) );
124
125 boost::bind( f: fv1, a1: _1 )( std::move( p1 ) );
126 }
127
128 {
129 std::unique_ptr<int> p1( new int(1) );
130 std::unique_ptr<int> p2( new int(2) );
131
132 boost::bind( f: fv2, a1: _1, a2: _2 )( std::move( p1 ), std::move( p2 ) );
133 }
134
135 {
136 std::unique_ptr<int> p1( new int(1) );
137 std::unique_ptr<int> p2( new int(2) );
138 std::unique_ptr<int> p3( new int(3) );
139
140 boost::bind( f: fv3, a1: _1, a2: _2, a3: _3 )( std::move( p1 ), std::move( p2 ), std::move( p3 ) );
141 }
142
143 {
144 std::unique_ptr<int> p1( new int(1) );
145 std::unique_ptr<int> p2( new int(2) );
146 std::unique_ptr<int> p3( new int(3) );
147 std::unique_ptr<int> p4( new int(4) );
148
149 boost::bind( f: fv4, a1: _1, a2: _2, a3: _3, a4: _4 )( std::move( p1 ), std::move( p2 ), std::move( p3 ), std::move( p4 ) );
150 }
151
152 {
153 std::unique_ptr<int> p1( new int(1) );
154 std::unique_ptr<int> p2( new int(2) );
155 std::unique_ptr<int> p3( new int(3) );
156 std::unique_ptr<int> p4( new int(4) );
157 std::unique_ptr<int> p5( new int(5) );
158
159 boost::bind( f: fv5, a1: _1, a2: _2, a3: _3, a4: _4, a5: _5 )( std::move( p1 ), std::move( p2 ), std::move( p3 ), std::move( p4 ), std::move( p5 ) );
160 }
161
162 {
163 std::unique_ptr<int> p1( new int(1) );
164 std::unique_ptr<int> p2( new int(2) );
165 std::unique_ptr<int> p3( new int(3) );
166 std::unique_ptr<int> p4( new int(4) );
167 std::unique_ptr<int> p5( new int(5) );
168 std::unique_ptr<int> p6( new int(6) );
169
170 boost::bind( f: fv6, a1: _1, a2: _2, a3: _3, a4: _4, a5: _5, a6: _6 )( std::move( p1 ), std::move( p2 ), std::move( p3 ), std::move( p4 ), std::move( p5 ), std::move( p6 ) );
171 }
172
173 {
174 std::unique_ptr<int> p1( new int(1) );
175 std::unique_ptr<int> p2( new int(2) );
176 std::unique_ptr<int> p3( new int(3) );
177 std::unique_ptr<int> p4( new int(4) );
178 std::unique_ptr<int> p5( new int(5) );
179 std::unique_ptr<int> p6( new int(6) );
180 std::unique_ptr<int> p7( new int(7) );
181
182 boost::bind( f: fv7, a1: _1, a2: _2, a3: _3, a4: _4, a5: _5, a6: _6, a7: _7 )( std::move( p1 ), std::move( p2 ), std::move( p3 ), std::move( p4 ), std::move( p5 ), std::move( p6 ), std::move( p7 ) );
183 }
184
185 {
186 std::unique_ptr<int> p1( new int(1) );
187 std::unique_ptr<int> p2( new int(2) );
188 std::unique_ptr<int> p3( new int(3) );
189 std::unique_ptr<int> p4( new int(4) );
190 std::unique_ptr<int> p5( new int(5) );
191 std::unique_ptr<int> p6( new int(6) );
192 std::unique_ptr<int> p7( new int(7) );
193 std::unique_ptr<int> p8( new int(8) );
194
195 boost::bind( f: fv8, a1: _1, a2: _2, a3: _3, a4: _4, a5: _5, a6: _6, a7: _7, a8: _8 )( std::move( p1 ), std::move( p2 ), std::move( p3 ), std::move( p4 ), std::move( p5 ), std::move( p6 ), std::move( p7 ), std::move( p8 ) );
196 }
197
198 {
199 std::unique_ptr<int> p1( new int(1) );
200 std::unique_ptr<int> p2( new int(2) );
201 std::unique_ptr<int> p3( new int(3) );
202 std::unique_ptr<int> p4( new int(4) );
203 std::unique_ptr<int> p5( new int(5) );
204 std::unique_ptr<int> p6( new int(6) );
205 std::unique_ptr<int> p7( new int(7) );
206 std::unique_ptr<int> p8( new int(8) );
207 std::unique_ptr<int> p9( new int(9) );
208
209 boost::bind( f: fv9, a1: _1, a2: _2, a3: _3, a4: _4, a5: _5, a6: _6, a7: _7, a8: _8, a9: _9 )( std::move( p1 ), std::move( p2 ), std::move( p3 ), std::move( p4 ), std::move( p5 ), std::move( p6 ), std::move( p7 ), std::move( p8 ), std::move( p9 ) );
210 }
211}
212
213int main()
214{
215 test();
216 return boost::report_errors();
217}
218
219#endif
220

source code of boost/libs/bind/test/bind_unique_ptr_test.cpp