]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/hof/test/protect.cpp
1 /*=============================================================================
2 Copyright (c) 2017 Paul Fultz II
4 Distributed under the Boost Software License, Version 1.0. (See accompanying
5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 ==============================================================================*/
7 #include <boost/hof/protect.hpp>
8 #include <boost/hof/lazy.hpp>
9 #include <boost/hof/placeholders.hpp>
13 #include <boost/hof/function.hpp>
26 const T
& constify(const T
& arg
)
33 int i
[9] = {0,1,2,3,4,5,6,7,8};
38 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(1))() == 1);
42 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_1
))(i
[0]) == &i
[0]);
44 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_1
))(i
[0], i
[1]) == &i
[0]);
45 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_2
))(i
[0], i
[1]) == &i
[1]);
47 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_1
))(i
[0], i
[1], i
[2]) == &i
[0]);
48 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_2
))(i
[0], i
[1], i
[2]) == &i
[1]);
49 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_3
))(i
[0], i
[1], i
[2]) == &i
[2]);
51 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_1
))(i
[0], i
[1], i
[2], i
[3]) == &i
[0]);
52 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_2
))(i
[0], i
[1], i
[2], i
[3]) == &i
[1]);
53 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_3
))(i
[0], i
[1], i
[2], i
[3]) == &i
[2]);
54 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_4
))(i
[0], i
[1], i
[2], i
[3]) == &i
[3]);
56 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_1
))(i
[0], i
[1], i
[2], i
[3], i
[4]) == &i
[0]);
57 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_2
))(i
[0], i
[1], i
[2], i
[3], i
[4]) == &i
[1]);
58 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_3
))(i
[0], i
[1], i
[2], i
[3], i
[4]) == &i
[2]);
59 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_4
))(i
[0], i
[1], i
[2], i
[3], i
[4]) == &i
[3]);
60 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_5
))(i
[0], i
[1], i
[2], i
[3], i
[4]) == &i
[4]);
62 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_1
))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5]) == &i
[0]);
63 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_2
))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5]) == &i
[1]);
64 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_3
))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5]) == &i
[2]);
65 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_4
))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5]) == &i
[3]);
66 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_5
))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5]) == &i
[4]);
67 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_6
))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5]) == &i
[5]);
69 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_1
))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6]) == &i
[0]);
70 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_2
))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6]) == &i
[1]);
71 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_3
))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6]) == &i
[2]);
72 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_4
))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6]) == &i
[3]);
73 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_5
))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6]) == &i
[4]);
74 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_6
))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6]) == &i
[5]);
75 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_7
))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6]) == &i
[6]);
77 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_1
))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7]) == &i
[0]);
78 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_2
))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7]) == &i
[1]);
79 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_3
))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7]) == &i
[2]);
80 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_4
))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7]) == &i
[3]);
81 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_5
))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7]) == &i
[4]);
82 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_6
))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7]) == &i
[5]);
83 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_7
))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7]) == &i
[6]);
84 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_8
))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7]) == &i
[7]);
86 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_1
))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7], i
[8]) == &i
[0]);
87 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_2
))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7], i
[8]) == &i
[1]);
88 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_3
))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7], i
[8]) == &i
[2]);
89 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_4
))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7], i
[8]) == &i
[3]);
90 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_5
))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7], i
[8]) == &i
[4]);
91 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_6
))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7], i
[8]) == &i
[5]);
92 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_7
))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7], i
[8]) == &i
[6]);
93 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_8
))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7], i
[8]) == &i
[7]);
94 BOOST_HOF_TEST_CHECK(&boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_9
))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7], i
[8]) == &i
[8]);
98 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_1
))(0) == 0);
100 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_1
))(0, 1) == 0);
101 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_2
))(0, 1) == 1);
103 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_1
))(0, 1, 2) == 0);
104 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_2
))(0, 1, 2) == 1);
105 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_3
))(0, 1, 2) == 2);
107 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_1
))(0, 1, 2, 3) == 0);
108 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_2
))(0, 1, 2, 3) == 1);
109 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_3
))(0, 1, 2, 3) == 2);
110 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_4
))(0, 1, 2, 3) == 3);
112 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_1
))(0, 1, 2, 3, 4) == 0);
113 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_2
))(0, 1, 2, 3, 4) == 1);
114 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_3
))(0, 1, 2, 3, 4) == 2);
115 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_4
))(0, 1, 2, 3, 4) == 3);
116 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_5
))(0, 1, 2, 3, 4) == 4);
118 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_1
))(0, 1, 2, 3, 4, 5) == 0);
119 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_2
))(0, 1, 2, 3, 4, 5) == 1);
120 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_3
))(0, 1, 2, 3, 4, 5) == 2);
121 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_4
))(0, 1, 2, 3, 4, 5) == 3);
122 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_5
))(0, 1, 2, 3, 4, 5) == 4);
123 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_6
))(0, 1, 2, 3, 4, 5) == 5);
125 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_1
))(0, 1, 2, 3, 4, 5, 6) == 0);
126 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_2
))(0, 1, 2, 3, 4, 5, 6) == 1);
127 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_3
))(0, 1, 2, 3, 4, 5, 6) == 2);
128 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_4
))(0, 1, 2, 3, 4, 5, 6) == 3);
129 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_5
))(0, 1, 2, 3, 4, 5, 6) == 4);
130 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_6
))(0, 1, 2, 3, 4, 5, 6) == 5);
131 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_7
))(0, 1, 2, 3, 4, 5, 6) == 6);
133 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_1
))(0, 1, 2, 3, 4, 5, 6, 7) == 0);
134 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_2
))(0, 1, 2, 3, 4, 5, 6, 7) == 1);
135 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_3
))(0, 1, 2, 3, 4, 5, 6, 7) == 2);
136 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_4
))(0, 1, 2, 3, 4, 5, 6, 7) == 3);
137 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_5
))(0, 1, 2, 3, 4, 5, 6, 7) == 4);
138 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_6
))(0, 1, 2, 3, 4, 5, 6, 7) == 5);
139 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_7
))(0, 1, 2, 3, 4, 5, 6, 7) == 6);
140 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_8
))(0, 1, 2, 3, 4, 5, 6, 7) == 7);
142 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_1
))(0, 1, 2, 3, 4, 5, 6, 7, 8) == 0);
143 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_2
))(0, 1, 2, 3, 4, 5, 6, 7, 8) == 1);
144 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_3
))(0, 1, 2, 3, 4, 5, 6, 7, 8) == 2);
145 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_4
))(0, 1, 2, 3, 4, 5, 6, 7, 8) == 3);
146 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_5
))(0, 1, 2, 3, 4, 5, 6, 7, 8) == 4);
147 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_6
))(0, 1, 2, 3, 4, 5, 6, 7, 8) == 5);
148 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_7
))(0, 1, 2, 3, 4, 5, 6, 7, 8) == 6);
149 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_8
))(0, 1, 2, 3, 4, 5, 6, 7, 8) == 7);
150 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_9
))(0, 1, 2, 3, 4, 5, 6, 7, 8) == 8);
152 // test mixed perfect forwarding
153 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_1
))(i
[0], 1) == 0);
154 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_2
))(i
[0], 1) == 1);
155 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_1
))(0, i
[1]) == 0);
156 BOOST_HOF_TEST_CHECK(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_2
))(0, i
[1]) == 1);
161 BOOST_HOF_TEST_CHECK(constify(constify(boost::hof::protect(boost::hof::lazy(f
)(1))))() == 1);
164 BOOST_HOF_TEST_CHECK(&constify(constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_1
))))(i
[0]) == &i
[0]);
166 BOOST_HOF_TEST_CHECK(&constify(constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_1
))))(i
[0], i
[1]) == &i
[0]);
167 BOOST_HOF_TEST_CHECK(&constify(constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_2
))))(i
[0], i
[1]) == &i
[1]);
169 BOOST_HOF_TEST_CHECK(&constify(constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_1
))))(i
[0], i
[1], i
[2]) == &i
[0]);
170 BOOST_HOF_TEST_CHECK(&constify(constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_2
))))(i
[0], i
[1], i
[2]) == &i
[1]);
171 BOOST_HOF_TEST_CHECK(&constify(constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_3
))))(i
[0], i
[1], i
[2]) == &i
[2]);
173 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_1
)))(i
[0], i
[1], i
[2], i
[3]) == &i
[0]);
174 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_2
)))(i
[0], i
[1], i
[2], i
[3]) == &i
[1]);
175 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_3
)))(i
[0], i
[1], i
[2], i
[3]) == &i
[2]);
176 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_4
)))(i
[0], i
[1], i
[2], i
[3]) == &i
[3]);
178 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_1
)))(i
[0], i
[1], i
[2], i
[3], i
[4]) == &i
[0]);
179 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_2
)))(i
[0], i
[1], i
[2], i
[3], i
[4]) == &i
[1]);
180 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_3
)))(i
[0], i
[1], i
[2], i
[3], i
[4]) == &i
[2]);
181 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_4
)))(i
[0], i
[1], i
[2], i
[3], i
[4]) == &i
[3]);
182 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_5
)))(i
[0], i
[1], i
[2], i
[3], i
[4]) == &i
[4]);
184 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_1
)))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5]) == &i
[0]);
185 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_2
)))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5]) == &i
[1]);
186 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_3
)))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5]) == &i
[2]);
187 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_4
)))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5]) == &i
[3]);
188 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_5
)))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5]) == &i
[4]);
189 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_6
)))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5]) == &i
[5]);
191 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_1
)))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6]) == &i
[0]);
192 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_2
)))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6]) == &i
[1]);
193 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_3
)))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6]) == &i
[2]);
194 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_4
)))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6]) == &i
[3]);
195 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_5
)))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6]) == &i
[4]);
196 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_6
)))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6]) == &i
[5]);
197 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_7
)))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6]) == &i
[6]);
199 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_1
)))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7]) == &i
[0]);
200 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_2
)))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7]) == &i
[1]);
201 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_3
)))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7]) == &i
[2]);
202 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_4
)))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7]) == &i
[3]);
203 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_5
)))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7]) == &i
[4]);
204 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_6
)))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7]) == &i
[5]);
205 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_7
)))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7]) == &i
[6]);
206 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_8
)))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7]) == &i
[7]);
208 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_1
)))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7], i
[8]) == &i
[0]);
209 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_2
)))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7], i
[8]) == &i
[1]);
210 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_3
)))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7], i
[8]) == &i
[2]);
211 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_4
)))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7], i
[8]) == &i
[3]);
212 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_5
)))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7], i
[8]) == &i
[4]);
213 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_6
)))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7], i
[8]) == &i
[5]);
214 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_7
)))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7], i
[8]) == &i
[6]);
215 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_8
)))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7], i
[8]) == &i
[7]);
216 BOOST_HOF_TEST_CHECK(&constify(boost::hof::protect(boost::hof::lazy(g
)(std::placeholders::_9
)))(i
[0], i
[1], i
[2], i
[3], i
[4], i
[5], i
[6], i
[7], i
[8]) == &i
[8]);
220 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_1
)))(0) == 0);
222 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_1
)))(0, 1) == 0);
223 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_2
)))(0, 1) == 1);
225 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_1
)))(0, 1, 2) == 0);
226 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_2
)))(0, 1, 2) == 1);
227 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_3
)))(0, 1, 2) == 2);
229 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_1
)))(0, 1, 2, 3) == 0);
230 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_2
)))(0, 1, 2, 3) == 1);
231 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_3
)))(0, 1, 2, 3) == 2);
232 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_4
)))(0, 1, 2, 3) == 3);
234 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_1
)))(0, 1, 2, 3, 4) == 0);
235 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_2
)))(0, 1, 2, 3, 4) == 1);
236 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_3
)))(0, 1, 2, 3, 4) == 2);
237 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_4
)))(0, 1, 2, 3, 4) == 3);
238 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_5
)))(0, 1, 2, 3, 4) == 4);
240 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_1
)))(0, 1, 2, 3, 4, 5) == 0);
241 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_2
)))(0, 1, 2, 3, 4, 5) == 1);
242 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_3
)))(0, 1, 2, 3, 4, 5) == 2);
243 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_4
)))(0, 1, 2, 3, 4, 5) == 3);
244 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_5
)))(0, 1, 2, 3, 4, 5) == 4);
245 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_6
)))(0, 1, 2, 3, 4, 5) == 5);
247 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_1
)))(0, 1, 2, 3, 4, 5, 6) == 0);
248 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_2
)))(0, 1, 2, 3, 4, 5, 6) == 1);
249 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_3
)))(0, 1, 2, 3, 4, 5, 6) == 2);
250 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_4
)))(0, 1, 2, 3, 4, 5, 6) == 3);
251 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_5
)))(0, 1, 2, 3, 4, 5, 6) == 4);
252 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_6
)))(0, 1, 2, 3, 4, 5, 6) == 5);
253 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_7
)))(0, 1, 2, 3, 4, 5, 6) == 6);
255 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_1
)))(0, 1, 2, 3, 4, 5, 6, 7) == 0);
256 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_2
)))(0, 1, 2, 3, 4, 5, 6, 7) == 1);
257 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_3
)))(0, 1, 2, 3, 4, 5, 6, 7) == 2);
258 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_4
)))(0, 1, 2, 3, 4, 5, 6, 7) == 3);
259 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_5
)))(0, 1, 2, 3, 4, 5, 6, 7) == 4);
260 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_6
)))(0, 1, 2, 3, 4, 5, 6, 7) == 5);
261 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_7
)))(0, 1, 2, 3, 4, 5, 6, 7) == 6);
262 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_8
)))(0, 1, 2, 3, 4, 5, 6, 7) == 7);
264 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_1
)))(0, 1, 2, 3, 4, 5, 6, 7, 8) == 0);
265 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_2
)))(0, 1, 2, 3, 4, 5, 6, 7, 8) == 1);
266 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_3
)))(0, 1, 2, 3, 4, 5, 6, 7, 8) == 2);
267 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_4
)))(0, 1, 2, 3, 4, 5, 6, 7, 8) == 3);
268 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_5
)))(0, 1, 2, 3, 4, 5, 6, 7, 8) == 4);
269 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_6
)))(0, 1, 2, 3, 4, 5, 6, 7, 8) == 5);
270 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_7
)))(0, 1, 2, 3, 4, 5, 6, 7, 8) == 6);
271 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_8
)))(0, 1, 2, 3, 4, 5, 6, 7, 8) == 7);
272 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_9
)))(0, 1, 2, 3, 4, 5, 6, 7, 8) == 8);
274 // test mixed perfect forwarding
275 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_1
)))(i
[0], 1) == 0);
276 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_2
)))(i
[0], 1) == 1);
277 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_1
)))(0, i
[1]) == 0);
278 BOOST_HOF_TEST_CHECK(constify(boost::hof::protect(boost::hof::lazy(f
)(std::placeholders::_2
)))(0, i
[1]) == 1);
281 BOOST_HOF_TEST_CASE()
283 BOOST_HOF_TEST_CHECK(boost::hof::lazy(boost::hof::apply
)(boost::hof::protect(boost::hof::lazy(boost::hof::identity
)(boost::hof::_1
)), boost::hof::_1
)(17) == 17);
284 BOOST_HOF_TEST_CHECK(boost::hof::lazy(boost::hof::apply
)(boost::hof::protect(boost::hof::lazy(boost::hof::identity
)(boost::hof::_1
)), 17)() == 17);
285 BOOST_HOF_STATIC_TEST_CHECK(boost::hof::lazy(boost::hof::apply
)(boost::hof::protect(boost::hof::lazy(boost::hof::identity
)(boost::hof::_1
)), boost::hof::_1
)(17) == 17);
286 BOOST_HOF_STATIC_TEST_CHECK(boost::hof::lazy(boost::hof::apply
)(boost::hof::protect(boost::hof::lazy(boost::hof::identity
)(boost::hof::_1
)), 17)() == 17);
296 BOOST_HOF_TEST_CASE()
298 BOOST_HOF_TEST_CHECK(boost::hof::lazy(boost::hof::apply
)(boost::hof::protect(boost::hof::lazy(id
)(std::placeholders::_1
)), std::placeholders::_1
)(17) == 17);
299 BOOST_HOF_TEST_CHECK(boost::hof::lazy(boost::hof::apply
)(boost::hof::protect(boost::hof::lazy(id
)(std::placeholders::_1
)), 17)() == 17);