• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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