1 #include <boost/config.hpp>
2
3 //
4 // bind_function_ap_test.cpp - regression test
5 //
6 // Copyright (c) 2015 Peter Dimov
7 //
8 // Distributed under the Boost Software License, Version 1.0.
9 // See accompanying file LICENSE_1_0.txt or copy at
10 // http://www.boost.org/LICENSE_1_0.txt
11 //
12
13 #if defined( BOOST_NO_AUTO_PTR )
14
main()15 int main()
16 {
17 }
18
19 #else
20
21 #if defined( __GNUC__ ) && ( __GNUC__ * 100 + __GNUC_MINOR__ >= 406 )
22 # pragma GCC diagnostic ignored "-Wdeprecated-declarations"
23 #elif defined( __clang__ ) && defined( __has_warning )
24 # if __has_warning( "-Wdeprecated-declarations" )
25 # pragma GCC diagnostic ignored "-Wdeprecated-declarations"
26 # endif
27 #endif
28
29 #include <boost/bind/bind.hpp>
30 #include <boost/function.hpp>
31 #include <boost/core/lightweight_test.hpp>
32 #include <memory>
33
34 using namespace boost::placeholders;
35
36 //
37
fv1(std::auto_ptr<int> p1)38 void fv1( std::auto_ptr<int> p1 )
39 {
40 BOOST_TEST( *p1 == 1 );
41 }
42
fv2(std::auto_ptr<int> p1,std::auto_ptr<int> p2)43 void fv2( std::auto_ptr<int> p1, std::auto_ptr<int> p2 )
44 {
45 BOOST_TEST( *p1 == 1 );
46 BOOST_TEST( *p2 == 2 );
47 }
48
fv3(std::auto_ptr<int> p1,std::auto_ptr<int> p2,std::auto_ptr<int> p3)49 void fv3( std::auto_ptr<int> p1, std::auto_ptr<int> p2, std::auto_ptr<int> p3 )
50 {
51 BOOST_TEST( *p1 == 1 );
52 BOOST_TEST( *p2 == 2 );
53 BOOST_TEST( *p3 == 3 );
54 }
55
fv4(std::auto_ptr<int> p1,std::auto_ptr<int> p2,std::auto_ptr<int> p3,std::auto_ptr<int> p4)56 void fv4( std::auto_ptr<int> p1, std::auto_ptr<int> p2, std::auto_ptr<int> p3, std::auto_ptr<int> p4 )
57 {
58 BOOST_TEST( *p1 == 1 );
59 BOOST_TEST( *p2 == 2 );
60 BOOST_TEST( *p3 == 3 );
61 BOOST_TEST( *p4 == 4 );
62 }
63
fv5(std::auto_ptr<int> p1,std::auto_ptr<int> p2,std::auto_ptr<int> p3,std::auto_ptr<int> p4,std::auto_ptr<int> p5)64 void fv5( std::auto_ptr<int> p1, std::auto_ptr<int> p2, std::auto_ptr<int> p3, std::auto_ptr<int> p4, std::auto_ptr<int> p5 )
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 }
72
fv6(std::auto_ptr<int> p1,std::auto_ptr<int> p2,std::auto_ptr<int> p3,std::auto_ptr<int> p4,std::auto_ptr<int> p5,std::auto_ptr<int> p6)73 void fv6( std::auto_ptr<int> p1, std::auto_ptr<int> p2, std::auto_ptr<int> p3, std::auto_ptr<int> p4, std::auto_ptr<int> p5, std::auto_ptr<int> p6 )
74 {
75 BOOST_TEST( *p1 == 1 );
76 BOOST_TEST( *p2 == 2 );
77 BOOST_TEST( *p3 == 3 );
78 BOOST_TEST( *p4 == 4 );
79 BOOST_TEST( *p5 == 5 );
80 BOOST_TEST( *p6 == 6 );
81 }
82
fv7(std::auto_ptr<int> p1,std::auto_ptr<int> p2,std::auto_ptr<int> p3,std::auto_ptr<int> p4,std::auto_ptr<int> p5,std::auto_ptr<int> p6,std::auto_ptr<int> p7)83 void fv7( std::auto_ptr<int> p1, std::auto_ptr<int> p2, std::auto_ptr<int> p3, std::auto_ptr<int> p4, std::auto_ptr<int> p5, std::auto_ptr<int> p6, std::auto_ptr<int> p7 )
84 {
85 BOOST_TEST( *p1 == 1 );
86 BOOST_TEST( *p2 == 2 );
87 BOOST_TEST( *p3 == 3 );
88 BOOST_TEST( *p4 == 4 );
89 BOOST_TEST( *p5 == 5 );
90 BOOST_TEST( *p6 == 6 );
91 BOOST_TEST( *p7 == 7 );
92 }
93
fv8(std::auto_ptr<int> p1,std::auto_ptr<int> p2,std::auto_ptr<int> p3,std::auto_ptr<int> p4,std::auto_ptr<int> p5,std::auto_ptr<int> p6,std::auto_ptr<int> p7,std::auto_ptr<int> p8)94 void fv8( std::auto_ptr<int> p1, std::auto_ptr<int> p2, std::auto_ptr<int> p3, std::auto_ptr<int> p4, std::auto_ptr<int> p5, std::auto_ptr<int> p6, std::auto_ptr<int> p7, std::auto_ptr<int> p8 )
95 {
96 BOOST_TEST( *p1 == 1 );
97 BOOST_TEST( *p2 == 2 );
98 BOOST_TEST( *p3 == 3 );
99 BOOST_TEST( *p4 == 4 );
100 BOOST_TEST( *p5 == 5 );
101 BOOST_TEST( *p6 == 6 );
102 BOOST_TEST( *p7 == 7 );
103 BOOST_TEST( *p8 == 8 );
104 }
105
fv9(std::auto_ptr<int> p1,std::auto_ptr<int> p2,std::auto_ptr<int> p3,std::auto_ptr<int> p4,std::auto_ptr<int> p5,std::auto_ptr<int> p6,std::auto_ptr<int> p7,std::auto_ptr<int> p8,std::auto_ptr<int> p9)106 void fv9( std::auto_ptr<int> p1, std::auto_ptr<int> p2, std::auto_ptr<int> p3, std::auto_ptr<int> p4, std::auto_ptr<int> p5, std::auto_ptr<int> p6, std::auto_ptr<int> p7, std::auto_ptr<int> p8, std::auto_ptr<int> p9 )
107 {
108 BOOST_TEST( *p1 == 1 );
109 BOOST_TEST( *p2 == 2 );
110 BOOST_TEST( *p3 == 3 );
111 BOOST_TEST( *p4 == 4 );
112 BOOST_TEST( *p5 == 5 );
113 BOOST_TEST( *p6 == 6 );
114 BOOST_TEST( *p7 == 7 );
115 BOOST_TEST( *p8 == 8 );
116 BOOST_TEST( *p9 == 9 );
117 }
118
test()119 void test()
120 {
121 {
122 boost::function<void(std::auto_ptr<int>)> fw1 = boost::bind( fv1, _1 );
123
124 std::auto_ptr<int> p1( new int(1) );
125
126 fw1( p1 );
127 }
128
129 {
130 boost::function<void(std::auto_ptr<int>, std::auto_ptr<int>)> fw2 = boost::bind( fv2, _1, _2 );
131
132 std::auto_ptr<int> p1( new int(1) );
133 std::auto_ptr<int> p2( new int(2) );
134
135 fw2( p1, p2 );
136 }
137
138 {
139 boost::function<void(std::auto_ptr<int>, std::auto_ptr<int>, std::auto_ptr<int>)> fw3 = boost::bind( fv3, _1, _2, _3 );
140
141 std::auto_ptr<int> p1( new int(1) );
142 std::auto_ptr<int> p2( new int(2) );
143 std::auto_ptr<int> p3( new int(3) );
144
145 fw3( p1, p2, p3 );
146 }
147
148 {
149 boost::function<void(std::auto_ptr<int>, std::auto_ptr<int>, std::auto_ptr<int>, std::auto_ptr<int>)> fw4 = boost::bind( fv4, _1, _2, _3, _4 );
150
151 std::auto_ptr<int> p1( new int(1) );
152 std::auto_ptr<int> p2( new int(2) );
153 std::auto_ptr<int> p3( new int(3) );
154 std::auto_ptr<int> p4( new int(4) );
155
156 fw4( p1, p2, p3, p4 );
157 }
158
159 {
160 boost::function<void(std::auto_ptr<int>, std::auto_ptr<int>, std::auto_ptr<int>, std::auto_ptr<int>, std::auto_ptr<int>)> fw5 = boost::bind( fv5, _1, _2, _3, _4, _5 );
161
162 std::auto_ptr<int> p1( new int(1) );
163 std::auto_ptr<int> p2( new int(2) );
164 std::auto_ptr<int> p3( new int(3) );
165 std::auto_ptr<int> p4( new int(4) );
166 std::auto_ptr<int> p5( new int(5) );
167
168 fw5( p1, p2, p3, p4, p5 );
169 }
170
171 {
172 boost::function<void(std::auto_ptr<int>, std::auto_ptr<int>, std::auto_ptr<int>, std::auto_ptr<int>, std::auto_ptr<int>, std::auto_ptr<int>)> fw6 = boost::bind( fv6, _1, _2, _3, _4, _5, _6 );
173
174 std::auto_ptr<int> p1( new int(1) );
175 std::auto_ptr<int> p2( new int(2) );
176 std::auto_ptr<int> p3( new int(3) );
177 std::auto_ptr<int> p4( new int(4) );
178 std::auto_ptr<int> p5( new int(5) );
179 std::auto_ptr<int> p6( new int(6) );
180
181 fw6( p1, p2, p3, p4, p5, p6 );
182 }
183
184 {
185 boost::function<void(std::auto_ptr<int>, std::auto_ptr<int>, std::auto_ptr<int>, std::auto_ptr<int>, std::auto_ptr<int>, std::auto_ptr<int>, std::auto_ptr<int>)> fw7 = boost::bind( fv7, _1, _2, _3, _4, _5, _6, _7 );
186
187 std::auto_ptr<int> p1( new int(1) );
188 std::auto_ptr<int> p2( new int(2) );
189 std::auto_ptr<int> p3( new int(3) );
190 std::auto_ptr<int> p4( new int(4) );
191 std::auto_ptr<int> p5( new int(5) );
192 std::auto_ptr<int> p6( new int(6) );
193 std::auto_ptr<int> p7( new int(7) );
194
195 fw7( p1, p2, p3, p4, p5, p6, p7 );
196 }
197
198 {
199 boost::function<void(std::auto_ptr<int>, std::auto_ptr<int>, std::auto_ptr<int>, std::auto_ptr<int>, std::auto_ptr<int>, std::auto_ptr<int>, std::auto_ptr<int>, std::auto_ptr<int>)> fw8 = boost::bind( fv8, _1, _2, _3, _4, _5, _6, _7, _8 );
200
201 std::auto_ptr<int> p1( new int(1) );
202 std::auto_ptr<int> p2( new int(2) );
203 std::auto_ptr<int> p3( new int(3) );
204 std::auto_ptr<int> p4( new int(4) );
205 std::auto_ptr<int> p5( new int(5) );
206 std::auto_ptr<int> p6( new int(6) );
207 std::auto_ptr<int> p7( new int(7) );
208 std::auto_ptr<int> p8( new int(8) );
209
210 fw8( p1, p2, p3, p4, p5, p6, p7, p8 );
211 }
212
213 {
214 boost::function<void(std::auto_ptr<int>, std::auto_ptr<int>, std::auto_ptr<int>, std::auto_ptr<int>, std::auto_ptr<int>, std::auto_ptr<int>, std::auto_ptr<int>, std::auto_ptr<int>, std::auto_ptr<int>)> fw9 = boost::bind( fv9, _1, _2, _3, _4, _5, _6, _7, _8, _9 );
215
216 std::auto_ptr<int> p1( new int(1) );
217 std::auto_ptr<int> p2( new int(2) );
218 std::auto_ptr<int> p3( new int(3) );
219 std::auto_ptr<int> p4( new int(4) );
220 std::auto_ptr<int> p5( new int(5) );
221 std::auto_ptr<int> p6( new int(6) );
222 std::auto_ptr<int> p7( new int(7) );
223 std::auto_ptr<int> p8( new int(8) );
224 std::auto_ptr<int> p9( new int(9) );
225
226 fw9( p1, p2, p3, p4, p5, p6, p7, p8, p9 );
227 }
228 }
229
main()230 int main()
231 {
232 test();
233 return boost::report_errors();
234 }
235
236 #endif // #if defined( BOOST_NO_AUTO_PTR )
237