]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/boost/vmd/detail/equal.hpp
import quincy beta 17.1.0
[ceph.git] / ceph / src / boost / boost / vmd / detail / equal.hpp
CommitLineData
7c673cae
FG
1
2// (C) Copyright Edward Diener 2011-2015
3// Use, modification and distribution are subject to the Boost Software License,
4// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
5// http://www.boost.org/LICENSE_1_0.txt).
6
7#if !defined(BOOST_VMD_DETAIL_EQUAL_HPP)
8#define BOOST_VMD_DETAIL_EQUAL_HPP
9
10#include <boost/preprocessor/cat.hpp>
11#include <boost/preprocessor/detail/auto_rec.hpp>
12#include <boost/preprocessor/facilities/empty.hpp>
13#include <boost/preprocessor/facilities/overload.hpp>
14#include <boost/preprocessor/logical/compl.hpp>
15#include <boost/vmd/detail/recurse/equal/equal_headers.hpp>
16#include <boost/vmd/is_identifier.hpp>
17#include <boost/vmd/is_empty_list.hpp>
18#include <boost/vmd/detail/not_empty.hpp>
19
20#include <boost/vmd/detail/recurse/equal/equal_1.hpp>
21#include <boost/vmd/detail/recurse/equal/equal_2.hpp>
22#include <boost/vmd/detail/recurse/equal/equal_3.hpp>
23#include <boost/vmd/detail/recurse/equal/equal_4.hpp>
24#include <boost/vmd/detail/recurse/equal/equal_5.hpp>
25#include <boost/vmd/detail/recurse/equal/equal_6.hpp>
26#include <boost/vmd/detail/recurse/equal/equal_7.hpp>
27#include <boost/vmd/detail/recurse/equal/equal_8.hpp>
28#include <boost/vmd/detail/recurse/equal/equal_9.hpp>
29#include <boost/vmd/detail/recurse/equal/equal_10.hpp>
30#include <boost/vmd/detail/recurse/equal/equal_11.hpp>
31#include <boost/vmd/detail/recurse/equal/equal_12.hpp>
32#include <boost/vmd/detail/recurse/equal/equal_13.hpp>
33#include <boost/vmd/detail/recurse/equal/equal_14.hpp>
34#include <boost/vmd/detail/recurse/equal/equal_15.hpp>
35#include <boost/vmd/detail/recurse/equal/equal_16.hpp>
36
37#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_1(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_1_D(d,vseq1,vseq2)
38#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_2(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_2_D(d,vseq1,vseq2)
39#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_3(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_3_D(d,vseq1,vseq2)
40#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_4(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_4_D(d,vseq1,vseq2)
41#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_5(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_5_D(d,vseq1,vseq2)
42#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_6(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_6_D(d,vseq1,vseq2)
43#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_7(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_7_D(d,vseq1,vseq2)
44#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_8(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_8_D(d,vseq1,vseq2)
45#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_9(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_9_D(d,vseq1,vseq2)
46#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_10(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_10_D(d,vseq1,vseq2)
47#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_11(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_11_D(d,vseq1,vseq2)
48#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_12(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_12_D(d,vseq1,vseq2)
49#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_13(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_13_D(d,vseq1,vseq2)
50#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_14(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_14_D(d,vseq1,vseq2)
51#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_15(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_15_D(d,vseq1,vseq2)
52#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_16(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_16_D(d,vseq1,vseq2)
53
54#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_AUTO_REC_D(n) \
55 BOOST_VMD_DETAIL_EQUAL_IS_1 \
56 ( \
57 BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_ ## n(1,,) \
58 ) \
59/**/
60
61#define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
62 BOOST_PP_CAT \
63 ( \
64 BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_, \
65 BOOST_PP_AUTO_REC(BOOST_VMD_DETAIL_EQUAL_SIMPLE_AUTO_REC_D,16) \
66 ) \
67/**/
68
69
70#define BOOST_VMD_DETAIL_EQUAL_CNI_CHK(vseq1,vseq2,vtype) \
71 BOOST_PP_IIF \
72 ( \
73 BOOST_PP_BITOR \
74 ( \
75 BOOST_PP_BITOR \
76 ( \
77 BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_ARRAY), \
78 BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_LIST) \
79 ), \
80 BOOST_PP_BITOR \
81 ( \
82 BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_SEQ), \
83 BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_TUPLE) \
84 ) \
85 ), \
86 BOOST_VMD_DETAIL_DATA_EQUAL, \
87 BOOST_VMD_DETAIL_EQUAL_CNI_SMP \
88 ) \
89 (vseq1,vseq2,vtype) \
90/**/
91
92#define BOOST_VMD_DETAIL_EQUAL_CNI_CHK_D(d,vseq1,vseq2,vtype) \
93 BOOST_PP_IIF \
94 ( \
95 BOOST_PP_BITOR \
96 ( \
97 BOOST_PP_BITOR \
98 ( \
99 BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_ARRAY), \
100 BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_LIST) \
101 ), \
102 BOOST_PP_BITOR \
103 ( \
104 BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_SEQ), \
105 BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_TUPLE) \
106 ) \
107 ), \
108 BOOST_VMD_DETAIL_DATA_EQUAL_D, \
109 BOOST_VMD_DETAIL_EQUAL_CNI_SMP_D \
110 ) \
111 (d,vseq1,vseq2,vtype) \
112/**/
113
114#define BOOST_VMD_DETAIL_EQUAL_VSEQ(vseq1,vseq2,vtype) \
115 BOOST_VMD_DETAIL_DATA_EQUAL \
116 ( \
117 BOOST_VMD_TO_SEQ(vseq1), \
118 BOOST_VMD_TO_SEQ(vseq2), \
119 BOOST_VMD_TYPE_SEQ \
120 ) \
121/**/
122
123#define BOOST_VMD_DETAIL_EQUAL_VSEQ_D(d,vseq1,vseq2,vtype) \
124 BOOST_VMD_DETAIL_DATA_EQUAL_D \
125 ( \
126 d, \
127 BOOST_VMD_TO_SEQ_D(d,vseq1), \
128 BOOST_VMD_TO_SEQ_D(d,vseq2), \
129 BOOST_VMD_TYPE_SEQ \
130 ) \
131/**/
132
133#define BOOST_VMD_DETAIL_EQUAL_CNI(vseq1,vseq2,vtype) \
134 BOOST_PP_IIF \
135 ( \
136 BOOST_VMD_DETAIL_EQUAL_TYPE \
137 ( \
138 vtype, \
139 BOOST_VMD_TYPE_SEQUENCE \
140 ), \
141 BOOST_VMD_DETAIL_EQUAL_VSEQ, \
142 BOOST_VMD_DETAIL_EQUAL_CNI_CHK \
143 ) \
144 (vseq1,vseq2,vtype) \
145/**/
146
147#define BOOST_VMD_DETAIL_EQUAL_CNI_D(d,vseq1,vseq2,vtype) \
148 BOOST_PP_IIF \
149 ( \
150 BOOST_VMD_DETAIL_EQUAL_TYPE_D \
151 ( \
152 d, \
153 vtype, \
154 BOOST_VMD_TYPE_SEQUENCE \
155 ), \
156 BOOST_VMD_DETAIL_EQUAL_VSEQ_D, \
157 BOOST_VMD_DETAIL_EQUAL_CNI_CHK_D \
158 ) \
159 (d,vseq1,vseq2,vtype) \
160/**/
161
162#define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_TUPLE(vseq1,vtype1,type) \
163 BOOST_PP_BITOR \
164 ( \
165 BOOST_VMD_DETAIL_EQUAL_TYPE \
166 ( \
167 BOOST_VMD_TYPE_ARRAY, \
168 vtype1 \
169 ), \
170 BOOST_PP_BITAND \
171 ( \
172 BOOST_VMD_DETAIL_EQUAL_TYPE \
173 ( \
174 BOOST_VMD_TYPE_LIST, \
175 vtype1 \
176 ), \
177 BOOST_PP_COMPL \
178 ( \
179 BOOST_VMD_IS_EMPTY_LIST(vseq1) \
180 ) \
181 ) \
182 ) \
183/**/
184
185#define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_TUPLE_D(d,vseq1,vtype1,type) \
186 BOOST_PP_BITOR \
187 ( \
188 BOOST_VMD_DETAIL_EQUAL_TYPE_D \
189 ( \
190 d, \
191 BOOST_VMD_TYPE_ARRAY, \
192 vtype1 \
193 ), \
194 BOOST_PP_BITAND \
195 ( \
196 BOOST_VMD_DETAIL_EQUAL_TYPE_D \
197 ( \
198 d, \
199 BOOST_VMD_TYPE_LIST, \
200 vtype1 \
201 ), \
202 BOOST_PP_COMPL \
203 ( \
204 BOOST_VMD_IS_EMPTY_LIST_D(d,vseq1) \
205 ) \
206 ) \
207 ) \
208/**/
209
210#define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_IDENTIFIER(vseq1,vtype1,type) \
211 BOOST_VMD_IDENTITY_RESULT \
212 ( \
213 BOOST_PP_IIF \
214 ( \
215 BOOST_VMD_DETAIL_EQUAL_TYPE \
216 ( \
217 BOOST_VMD_TYPE_IDENTIFIER, \
218 type \
219 ), \
220 BOOST_VMD_IS_IDENTIFIER, \
221 BOOST_VMD_IDENTITY(0) \
222 ) \
223 (vseq1) \
224 ) \
225/**/
226
227#define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_IDENTIFIER_D(d,vseq1,vtype1,type) \
228 BOOST_VMD_IDENTITY_RESULT \
229 ( \
230 BOOST_PP_IIF \
231 ( \
232 BOOST_VMD_DETAIL_EQUAL_TYPE_D \
233 ( \
234 d, \
235 BOOST_VMD_TYPE_IDENTIFIER, \
236 type \
237 ), \
238 BOOST_VMD_IS_IDENTIFIER_D, \
239 BOOST_VMD_IDENTITY(0) \
240 ) \
241 (d,vseq1) \
242 ) \
243/**/
244
245#define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK(vseq1,vtype1,type) \
246 BOOST_PP_IIF \
247 ( \
248 BOOST_VMD_DETAIL_EQUAL_TYPE \
249 ( \
250 BOOST_VMD_TYPE_TUPLE, \
251 type \
252 ), \
253 BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_TUPLE, \
254 BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_IDENTIFIER \
255 ) \
256 (vseq1,vtype1,type) \
257/**/
258
259#define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_D(d,vseq1,vtype1,type) \
260 BOOST_PP_IIF \
261 ( \
262 BOOST_VMD_DETAIL_EQUAL_TYPE_D \
263 ( \
264 d, \
265 BOOST_VMD_TYPE_TUPLE, \
266 type \
267 ), \
268 BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_TUPLE_D, \
269 BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_IDENTIFIER_D \
270 ) \
271 (d,vseq1,vtype1,type) \
272/**/
273
274#define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE(vseq1,vtype1,type) \
275 BOOST_VMD_IDENTITY_RESULT \
276 ( \
277 BOOST_PP_IIF \
278 ( \
279 BOOST_VMD_DETAIL_EQUAL_TYPE \
280 ( \
281 vtype1, \
282 type \
283 ), \
284 BOOST_VMD_IDENTITY(1), \
285 BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK \
286 ) \
287 (vseq1,vtype1,type) \
288 ) \
289/**/
290
291#define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_D(d,vseq1,vtype1,type) \
292 BOOST_VMD_IDENTITY_RESULT \
293 ( \
294 BOOST_PP_IIF \
295 ( \
296 BOOST_VMD_DETAIL_EQUAL_TYPE_D \
297 ( \
298 d, \
299 vtype1, \
300 type \
301 ), \
302 BOOST_VMD_IDENTITY(1), \
303 BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_D \
304 ) \
305 (d,vseq1,vtype1,type) \
306 ) \
307/**/
308
309#define BOOST_VMD_DETAIL_EQUAL_WT_CHECK(vseq1,vseq2,vtype1,vtype2,type) \
310 BOOST_VMD_IDENTITY_RESULT \
311 ( \
312 BOOST_PP_IIF \
313 ( \
314 BOOST_PP_BITAND \
315 ( \
316 BOOST_VMD_DETAIL_EQUAL_TYPE \
317 ( \
318 vtype1, \
319 vtype2 \
320 ), \
321 BOOST_VMD_IDENTITY_RESULT \
322 ( \
323 BOOST_PP_IIF \
324 ( \
325 BOOST_VMD_DETAIL_NOT_EMPTY(type), \
326 BOOST_VMD_DETAIL_EQUAL_TEST_TYPE, \
327 BOOST_VMD_IDENTITY(1) \
328 ) \
329 (vseq1,vtype1,type) \
330 ) \
331 ), \
332 BOOST_VMD_DETAIL_EQUAL_CNI, \
333 BOOST_VMD_IDENTITY(0) \
334 ) \
335 (vseq1,vseq2,vtype1) \
336 ) \
337/**/
338
339#define BOOST_VMD_DETAIL_EQUAL_WT_CHECK_D(d,vseq1,vseq2,vtype1,vtype2,type) \
340 BOOST_VMD_IDENTITY_RESULT \
341 ( \
342 BOOST_PP_IIF \
343 ( \
344 BOOST_PP_BITAND \
345 ( \
346 BOOST_VMD_DETAIL_EQUAL_TYPE_D \
347 ( \
348 d, \
349 vtype1, \
350 vtype2 \
351 ), \
352 BOOST_VMD_IDENTITY_RESULT \
353 ( \
354 BOOST_PP_IIF \
355 ( \
356 BOOST_VMD_DETAIL_NOT_EMPTY(type), \
357 BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_D, \
358 BOOST_VMD_IDENTITY(1) \
359 ) \
360 (d,vseq1,vtype1,type) \
361 ) \
362 ), \
363 BOOST_VMD_DETAIL_EQUAL_CNI_D, \
364 BOOST_VMD_IDENTITY(0) \
365 ) \
366 (d,vseq1,vseq2,vtype1) \
367 ) \
368/**/
369
370#define BOOST_VMD_DETAIL_EQUAL_WT_CONVERT(vseq1,vseq2,vtype1,vtype2,type) \
371 BOOST_VMD_DETAIL_EQUAL_WT_CHECK \
372 ( \
373 vseq1, \
374 vseq2, \
375 BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq1,vtype1), \
376 BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq2,vtype2), \
377 type \
378 ) \
379/**/
380
381#define BOOST_VMD_DETAIL_EQUAL_WT_CONVERT_D(d,vseq1,vseq2,vtype1,vtype2,type) \
382 BOOST_VMD_DETAIL_EQUAL_WT_CHECK_D \
383 ( \
384 d, \
385 vseq1, \
386 vseq2, \
387 BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq1,vtype1), \
388 BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq2,vtype2), \
389 type \
390 ) \
391/**/
392
393#define BOOST_VMD_DETAIL_EQUAL_WT(vseq1,vseq2,vtype1,vtype2,type) \
394 BOOST_VMD_IDENTITY_RESULT \
395 ( \
396 BOOST_PP_IIF \
397 ( \
398 BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH(vseq1,vseq2,vtype1,vtype2), \
399 BOOST_VMD_IDENTITY(0), \
400 BOOST_VMD_DETAIL_EQUAL_WT_CONVERT \
401 ) \
402 (vseq1,vseq2,vtype1,vtype2,type) \
403 ) \
404/**/
405
406#define BOOST_VMD_DETAIL_EQUAL_WT_D(d,vseq1,vseq2,vtype1,vtype2,type) \
407 BOOST_VMD_IDENTITY_RESULT \
408 ( \
409 BOOST_PP_IIF \
410 ( \
411 BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH_D(d,vseq1,vseq2,vtype1,vtype2), \
412 BOOST_VMD_IDENTITY(0), \
413 BOOST_VMD_DETAIL_EQUAL_WT_CONVERT_D \
414 ) \
415 (d,vseq1,vseq2,vtype1,vtype2,type) \
416 ) \
417/**/
418
419#define BOOST_VMD_DETAIL_EQUAL_GTYPE(vseq1,vseq2,type) \
420 BOOST_VMD_DETAIL_EQUAL_WT \
421 ( \
422 vseq1, \
423 vseq2, \
424 BOOST_VMD_GET_TYPE(vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
425 BOOST_VMD_GET_TYPE(vseq2,BOOST_VMD_RETURN_TYPE_TUPLE), \
426 type \
427 ) \
428/**/
429
430#define BOOST_VMD_DETAIL_EQUAL_GTYPE_D(d,vseq1,vseq2,type) \
431 BOOST_VMD_DETAIL_EQUAL_WT_D \
432 ( \
433 d, \
434 vseq1, \
435 vseq2, \
436 BOOST_VMD_GET_TYPE_D(d,vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
437 BOOST_VMD_GET_TYPE_D(d,vseq2,BOOST_VMD_RETURN_TYPE_TUPLE), \
438 type \
439 ) \
440/**/
441
442#define BOOST_VMD_DETAIL_EQUAL_EBP(vseq1,vseq2,be1,be2,type) \
443 BOOST_VMD_IDENTITY_RESULT \
444 ( \
445 BOOST_PP_IIF \
446 ( \
447 BOOST_PP_BITAND \
448 ( \
449 BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
450 BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
451 ), \
452 BOOST_VMD_DETAIL_EQUAL_GTYPE, \
453 BOOST_VMD_IDENTITY(0) \
454 ) \
455 (vseq1,vseq2,type) \
456 ) \
457/**/
458
459#define BOOST_VMD_DETAIL_EQUAL_EBP_D(d,vseq1,vseq2,be1,be2,type) \
460 BOOST_VMD_IDENTITY_RESULT \
461 ( \
462 BOOST_PP_IIF \
463 ( \
464 BOOST_PP_BITAND \
465 ( \
466 BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
467 BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
468 ), \
469 BOOST_VMD_DETAIL_EQUAL_GTYPE_D, \
470 BOOST_VMD_IDENTITY(0) \
471 ) \
472 (d,vseq1,vseq2,type) \
473 ) \
474/**/
475
476#define BOOST_VMD_DETAIL_EQUAL_EMPTY(vseq1,vseq2,be1,be2,type) \
477 BOOST_PP_IIF \
478 ( \
479 BOOST_PP_BITAND(be1,be2), \
480 BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
481 BOOST_VMD_DETAIL_EQUAL_EBP \
482 ) \
483 (vseq1,vseq2,be1,be2,type) \
484/**/
485
486#define BOOST_VMD_DETAIL_EQUAL_EMPTY_D(d,vseq1,vseq2,be1,be2,type) \
487 BOOST_PP_IIF \
488 ( \
489 BOOST_PP_BITAND(be1,be2), \
490 BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
491 BOOST_VMD_DETAIL_EQUAL_EBP_D \
492 ) \
493 (d,vseq1,vseq2,be1,be2,type) \
494/**/
495
20effc67
TL
496#define BOOST_VMD_DETAIL_EQUAL_OV0(vseq1,vseq2) \
497 BOOST_VMD_DETAIL_EQUAL_EMPTY \
498 ( \
499 vseq1, \
500 , \
501 BOOST_VMD_IS_EMPTY(vseq1), \
502 1, \
503 ) \
504/**/
505
7c673cae
FG
506#define BOOST_VMD_DETAIL_EQUAL_OV1(vseq1,vseq2) \
507 BOOST_VMD_DETAIL_EQUAL_EMPTY \
508 ( \
509 vseq1, \
510 vseq2, \
511 BOOST_VMD_IS_EMPTY(vseq1), \
512 BOOST_VMD_IS_EMPTY(vseq2), \
513 ) \
514/**/
515
516#define BOOST_VMD_DETAIL_EQUAL_OV2(vseq1,vseq2,type) \
517 BOOST_VMD_DETAIL_EQUAL_EMPTY \
518 ( \
519 vseq1, \
520 vseq2, \
521 BOOST_VMD_IS_EMPTY(vseq1), \
522 BOOST_VMD_IS_EMPTY(vseq2), \
523 type \
524 ) \
525/**/
526
20effc67
TL
527#define BOOST_VMD_DETAIL_EQUAL_D_OV0(d,vseq1,vseq2) \
528 BOOST_VMD_DETAIL_EQUAL_EMPTY_D \
529 ( \
530 d, \
531 vseq1, \
532 , \
533 BOOST_VMD_IS_EMPTY(vseq1), \
534 1, \
535 ) \
536/**/
537
7c673cae
FG
538#define BOOST_VMD_DETAIL_EQUAL_D_OV1(d,vseq1,vseq2) \
539 BOOST_VMD_DETAIL_EQUAL_EMPTY_D \
540 ( \
541 d, \
542 vseq1, \
543 vseq2, \
544 BOOST_VMD_IS_EMPTY(vseq1), \
545 BOOST_VMD_IS_EMPTY(vseq2), \
546 ) \
547/**/
548
549#define BOOST_VMD_DETAIL_EQUAL_D_OV2(d,vseq1,vseq2,type) \
550 BOOST_VMD_DETAIL_EQUAL_EMPTY_D \
551 ( \
552 d, \
553 vseq1, \
554 vseq2, \
555 BOOST_VMD_IS_EMPTY(vseq1), \
556 BOOST_VMD_IS_EMPTY(vseq2), \
557 type \
558 ) \
559/**/
560
561#if BOOST_VMD_MSVC
562
563#define BOOST_VMD_DETAIL_EQUAL(vseq1,...) \
564 BOOST_PP_CAT(BOOST_PP_OVERLOAD(BOOST_VMD_DETAIL_EQUAL_OV,__VA_ARGS__)(vseq1,__VA_ARGS__),BOOST_PP_EMPTY()) \
565/**/
566
567#define BOOST_VMD_DETAIL_EQUAL_D(d,vseq1,...) \
568 BOOST_PP_CAT(BOOST_PP_OVERLOAD(BOOST_VMD_DETAIL_EQUAL_D_OV,__VA_ARGS__)(d,vseq1,__VA_ARGS__),BOOST_PP_EMPTY()) \
569/**/
570
571#else
572
573#define BOOST_VMD_DETAIL_EQUAL(vseq1,...) \
574 BOOST_PP_OVERLOAD(BOOST_VMD_DETAIL_EQUAL_OV,__VA_ARGS__)(vseq1,__VA_ARGS__) \
575/**/
576
577#define BOOST_VMD_DETAIL_EQUAL_D(d,vseq1,...) \
578 BOOST_PP_OVERLOAD(BOOST_VMD_DETAIL_EQUAL_D_OV,__VA_ARGS__)(d,vseq1,__VA_ARGS__) \
579/**/
580
581#endif
582
583#endif /* BOOST_VMD_DETAIL_EQUAL_HPP */