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