]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/phoenix/test/boost_bind_compatibility/bind_fastcall_mf_test.cpp
1 /*==============================================================================
2 Copyright (c) 2001 Peter Dimov
3 Copyright (c) 2005-2010 Joel de Guzman
4 Copyright (c) 2010 Thomas Heller
6 Distributed under the Boost Software License, Version 1.0. (See accompanying
7 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
8 ==============================================================================*/
10 #include <boost/config.hpp>
12 #if defined(BOOST_MSVC)
13 #pragma warning(disable: 4786) // identifier truncated in debug info
14 #pragma warning(disable: 4710) // function not inlined
15 #pragma warning(disable: 4711) // function selected for automatic inline expansion
16 #pragma warning(disable: 4514) // unreferenced inline removed
19 #define BOOST_MEM_FN_ENABLE_FASTCALL
21 #include <boost/phoenix/core.hpp>
22 #include <boost/phoenix/bind.hpp>
24 #if defined(BOOST_MSVC) && (BOOST_MSVC < 1300)
25 #pragma warning(push, 3)
30 #if defined(BOOST_MSVC) && (BOOST_MSVC < 1300)
34 #include <boost/detail/lightweight_test.hpp>
38 mutable unsigned int hash
;
42 void __fastcall
f0() { f1(17); }
43 void __fastcall
g0() const { g1(17); }
45 void __fastcall
f1(int a1
) { hash
= (hash
* 17041 + a1
) % 32768; }
46 void __fastcall
g1(int a1
) const { hash
= (hash
* 17041 + a1
* 2) % 32768; }
48 void __fastcall
f2(int a1
, int a2
) { f1(a1
); f1(a2
); }
49 void __fastcall
g2(int a1
, int a2
) const { g1(a1
); g1(a2
); }
51 void __fastcall
f3(int a1
, int a2
, int a3
) { f2(a1
, a2
); f1(a3
); }
52 void __fastcall
g3(int a1
, int a2
, int a3
) const { g2(a1
, a2
); g1(a3
); }
54 void __fastcall
f4(int a1
, int a2
, int a3
, int a4
) { f3(a1
, a2
, a3
); f1(a4
); }
55 void __fastcall
g4(int a1
, int a2
, int a3
, int a4
) const { g3(a1
, a2
, a3
); g1(a4
); }
57 void __fastcall
f5(int a1
, int a2
, int a3
, int a4
, int a5
) { f4(a1
, a2
, a3
, a4
); f1(a5
); }
58 void __fastcall
g5(int a1
, int a2
, int a3
, int a4
, int a5
) const { g4(a1
, a2
, a3
, a4
); g1(a5
); }
60 void __fastcall
f6(int a1
, int a2
, int a3
, int a4
, int a5
, int a6
) { f5(a1
, a2
, a3
, a4
, a5
); f1(a6
); }
61 void __fastcall
g6(int a1
, int a2
, int a3
, int a4
, int a5
, int a6
) const { g5(a1
, a2
, a3
, a4
, a5
); g1(a6
); }
63 void __fastcall
f7(int a1
, int a2
, int a3
, int a4
, int a5
, int a6
, int a7
) { f6(a1
, a2
, a3
, a4
, a5
, a6
); f1(a7
); }
64 void __fastcall
g7(int a1
, int a2
, int a3
, int a4
, int a5
, int a6
, int a7
) const { g6(a1
, a2
, a3
, a4
, a5
, a6
); g1(a7
); }
66 void __fastcall
f8(int a1
, int a2
, int a3
, int a4
, int a5
, int a6
, int a7
, int a8
) { f7(a1
, a2
, a3
, a4
, a5
, a6
, a7
); f1(a8
); }
67 void __fastcall
g8(int a1
, int a2
, int a3
, int a4
, int a5
, int a6
, int a7
, int a8
) const { g7(a1
, a2
, a3
, a4
, a5
, a6
, a7
); g1(a8
); }
70 void member_function_test()
72 using boost::phoenix::bind
;
73 using boost::phoenix::ref
;
80 bind(&X::f0
, ref(x
))();
84 bind(&X::g0
, ref(x
))();
88 bind(&X::f1
, &x
, 1)();
89 bind(&X::f1
, ref(x
), 1)();
91 bind(&X::g1
, &x
, 1)();
93 bind(&X::g1
, ref(x
), 1)();
97 bind(&X::f2
, &x
, 1, 2)();
98 bind(&X::f2
, ref(x
), 1, 2)();
100 bind(&X::g2
, &x
, 1, 2)();
101 bind(&X::g2
, x
, 1, 2)();
102 bind(&X::g2
, ref(x
), 1, 2)();
106 bind(&X::f3
, &x
, 1, 2, 3)();
107 bind(&X::f3
, ref(x
), 1, 2, 3)();
109 bind(&X::g3
, &x
, 1, 2, 3)();
110 bind(&X::g3
, x
, 1, 2, 3)();
111 bind(&X::g3
, ref(x
), 1, 2, 3)();
115 bind(&X::f4
, &x
, 1, 2, 3, 4)();
116 bind(&X::f4
, ref(x
), 1, 2, 3, 4)();
118 bind(&X::g4
, &x
, 1, 2, 3, 4)();
119 bind(&X::g4
, x
, 1, 2, 3, 4)();
120 bind(&X::g4
, ref(x
), 1, 2, 3, 4)();
124 bind(&X::f5
, &x
, 1, 2, 3, 4, 5)();
125 bind(&X::f5
, ref(x
), 1, 2, 3, 4, 5)();
127 bind(&X::g5
, &x
, 1, 2, 3, 4, 5)();
128 bind(&X::g5
, x
, 1, 2, 3, 4, 5)();
129 bind(&X::g5
, ref(x
), 1, 2, 3, 4, 5)();
133 bind(&X::f6
, &x
, 1, 2, 3, 4, 5, 6)();
134 bind(&X::f6
, ref(x
), 1, 2, 3, 4, 5, 6)();
136 bind(&X::g6
, &x
, 1, 2, 3, 4, 5, 6)();
137 bind(&X::g6
, x
, 1, 2, 3, 4, 5, 6)();
138 bind(&X::g6
, ref(x
), 1, 2, 3, 4, 5, 6)();
142 bind(&X::f7
, &x
, 1, 2, 3, 4, 5, 6, 7)();
143 bind(&X::f7
, ref(x
), 1, 2, 3, 4, 5, 6, 7)();
145 bind(&X::g7
, &x
, 1, 2, 3, 4, 5, 6, 7)();
146 bind(&X::g7
, x
, 1, 2, 3, 4, 5, 6, 7)();
147 bind(&X::g7
, ref(x
), 1, 2, 3, 4, 5, 6, 7)();
151 bind(&X::f8
, &x
, 1, 2, 3, 4, 5, 6, 7, 8)();
152 bind(&X::f8
, ref(x
), 1, 2, 3, 4, 5, 6, 7, 8)();
154 bind(&X::g8
, &x
, 1, 2, 3, 4, 5, 6, 7, 8)();
155 bind(&X::g8
, x
, 1, 2, 3, 4, 5, 6, 7, 8)();
156 bind(&X::g8
, ref(x
), 1, 2, 3, 4, 5, 6, 7, 8)();
158 BOOST_TEST( x
.hash
== 23558 );
163 member_function_test();
164 return boost::report_errors();