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