Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:53:36

0001 
0002 //  (C) Copyright Edward Diener 2011-2015
0003 //  Use, modification and distribution are subject to the Boost Software License,
0004 //  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
0005 //  http://www.boost.org/LICENSE_1_0.txt).
0006 
0007 #if !defined(BOOST_VMD_DETAIL_EQUAL_HPP)
0008 #define BOOST_VMD_DETAIL_EQUAL_HPP
0009 
0010 #include <boost/preprocessor/cat.hpp>
0011 #include <boost/preprocessor/detail/auto_rec.hpp>
0012 #include <boost/preprocessor/facilities/empty.hpp>
0013 #include <boost/preprocessor/facilities/overload.hpp>
0014 #include <boost/preprocessor/logical/compl.hpp>
0015 #include <boost/vmd/detail/recurse/equal/equal_headers.hpp>
0016 #include <boost/vmd/is_identifier.hpp>
0017 #include <boost/vmd/is_empty_list.hpp>
0018 #include <boost/vmd/detail/not_empty.hpp>
0019 
0020 #include <boost/vmd/detail/recurse/equal/equal_1.hpp>
0021 #include <boost/vmd/detail/recurse/equal/equal_2.hpp>
0022 #include <boost/vmd/detail/recurse/equal/equal_3.hpp>
0023 #include <boost/vmd/detail/recurse/equal/equal_4.hpp>
0024 #include <boost/vmd/detail/recurse/equal/equal_5.hpp>
0025 #include <boost/vmd/detail/recurse/equal/equal_6.hpp>
0026 #include <boost/vmd/detail/recurse/equal/equal_7.hpp>
0027 #include <boost/vmd/detail/recurse/equal/equal_8.hpp>
0028 #include <boost/vmd/detail/recurse/equal/equal_9.hpp>
0029 #include <boost/vmd/detail/recurse/equal/equal_10.hpp>
0030 #include <boost/vmd/detail/recurse/equal/equal_11.hpp>
0031 #include <boost/vmd/detail/recurse/equal/equal_12.hpp>
0032 #include <boost/vmd/detail/recurse/equal/equal_13.hpp>
0033 #include <boost/vmd/detail/recurse/equal/equal_14.hpp>
0034 #include <boost/vmd/detail/recurse/equal/equal_15.hpp>
0035 #include <boost/vmd/detail/recurse/equal/equal_16.hpp>
0036 
0037 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_1(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_1_D(d,vseq1,vseq2)
0038 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_2(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_2_D(d,vseq1,vseq2)
0039 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_3(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_3_D(d,vseq1,vseq2)
0040 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_4(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_4_D(d,vseq1,vseq2)
0041 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_5(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_5_D(d,vseq1,vseq2)
0042 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_6(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_6_D(d,vseq1,vseq2)
0043 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_7(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_7_D(d,vseq1,vseq2)
0044 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_8(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_8_D(d,vseq1,vseq2)
0045 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_9(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_9_D(d,vseq1,vseq2)
0046 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_10(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_10_D(d,vseq1,vseq2)
0047 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_11(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_11_D(d,vseq1,vseq2)
0048 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_12(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_12_D(d,vseq1,vseq2)
0049 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_13(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_13_D(d,vseq1,vseq2)
0050 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_14(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_14_D(d,vseq1,vseq2)
0051 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_15(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_15_D(d,vseq1,vseq2)
0052 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_16(d,vseq1,vseq2) BOOST_VMD_DETAIL_EQUAL_16_D(d,vseq1,vseq2)
0053 
0054 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_AUTO_REC_D(n) \
0055     BOOST_VMD_DETAIL_EQUAL_IS_1 \
0056         ( \
0057         BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_ ## n(1,,) \
0058         ) \
0059 /**/
0060 
0061 #define BOOST_VMD_DETAIL_EQUAL_SIMPLE_D \
0062     BOOST_PP_CAT \
0063         ( \
0064         BOOST_VMD_DETAIL_EQUAL_SIMPLE_D_, \
0065         BOOST_PP_AUTO_REC(BOOST_VMD_DETAIL_EQUAL_SIMPLE_AUTO_REC_D,16) \
0066         ) \
0067 /**/
0068 
0069 
0070 #define BOOST_VMD_DETAIL_EQUAL_CNI_CHK(vseq1,vseq2,vtype) \
0071     BOOST_PP_IIF \
0072         ( \
0073         BOOST_PP_BITOR \
0074             ( \
0075             BOOST_PP_BITOR \
0076                 ( \
0077                 BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_ARRAY), \
0078                 BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_LIST) \
0079                 ), \
0080             BOOST_PP_BITOR \
0081                 ( \
0082                 BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_SEQ), \
0083                 BOOST_VMD_DETAIL_EQUAL_TYPE(vtype,BOOST_VMD_TYPE_TUPLE) \
0084                 ) \
0085             ), \
0086         BOOST_VMD_DETAIL_DATA_EQUAL, \
0087         BOOST_VMD_DETAIL_EQUAL_CNI_SMP \
0088         ) \
0089     (vseq1,vseq2,vtype) \
0090 /**/
0091 
0092 #define BOOST_VMD_DETAIL_EQUAL_CNI_CHK_D(d,vseq1,vseq2,vtype) \
0093     BOOST_PP_IIF \
0094         ( \
0095         BOOST_PP_BITOR \
0096             ( \
0097             BOOST_PP_BITOR \
0098                 ( \
0099                 BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_ARRAY), \
0100                 BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_LIST) \
0101                 ), \
0102             BOOST_PP_BITOR \
0103                 ( \
0104                 BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_SEQ), \
0105                 BOOST_VMD_DETAIL_EQUAL_TYPE_D(d,vtype,BOOST_VMD_TYPE_TUPLE) \
0106                 ) \
0107             ), \
0108         BOOST_VMD_DETAIL_DATA_EQUAL_D, \
0109         BOOST_VMD_DETAIL_EQUAL_CNI_SMP_D \
0110         ) \
0111     (d,vseq1,vseq2,vtype) \
0112 /**/
0113 
0114 #define BOOST_VMD_DETAIL_EQUAL_VSEQ(vseq1,vseq2,vtype) \
0115     BOOST_VMD_DETAIL_DATA_EQUAL \
0116         ( \
0117         BOOST_VMD_TO_SEQ(vseq1), \
0118         BOOST_VMD_TO_SEQ(vseq2), \
0119         BOOST_VMD_TYPE_SEQ \
0120         ) \
0121 /**/
0122 
0123 #define BOOST_VMD_DETAIL_EQUAL_VSEQ_D(d,vseq1,vseq2,vtype) \
0124     BOOST_VMD_DETAIL_DATA_EQUAL_D \
0125         ( \
0126         d, \
0127         BOOST_VMD_TO_SEQ_D(d,vseq1), \
0128         BOOST_VMD_TO_SEQ_D(d,vseq2), \
0129         BOOST_VMD_TYPE_SEQ \
0130         ) \
0131 /**/
0132 
0133 #define BOOST_VMD_DETAIL_EQUAL_CNI(vseq1,vseq2,vtype) \
0134     BOOST_PP_IIF \
0135         ( \
0136         BOOST_VMD_DETAIL_EQUAL_TYPE \
0137             ( \
0138             vtype, \
0139             BOOST_VMD_TYPE_SEQUENCE \
0140             ), \
0141         BOOST_VMD_DETAIL_EQUAL_VSEQ, \
0142         BOOST_VMD_DETAIL_EQUAL_CNI_CHK \
0143         ) \
0144     (vseq1,vseq2,vtype) \
0145 /**/
0146 
0147 #define BOOST_VMD_DETAIL_EQUAL_CNI_D(d,vseq1,vseq2,vtype) \
0148     BOOST_PP_IIF \
0149         ( \
0150         BOOST_VMD_DETAIL_EQUAL_TYPE_D \
0151             ( \
0152             d, \
0153             vtype, \
0154             BOOST_VMD_TYPE_SEQUENCE \
0155             ), \
0156         BOOST_VMD_DETAIL_EQUAL_VSEQ_D, \
0157         BOOST_VMD_DETAIL_EQUAL_CNI_CHK_D \
0158         ) \
0159     (d,vseq1,vseq2,vtype) \
0160 /**/
0161 
0162 #define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_TUPLE(vseq1,vtype1,type) \
0163     BOOST_PP_BITOR \
0164         ( \
0165         BOOST_VMD_DETAIL_EQUAL_TYPE \
0166             ( \
0167             BOOST_VMD_TYPE_ARRAY, \
0168             vtype1 \
0169             ), \
0170         BOOST_PP_BITAND \
0171             ( \
0172             BOOST_VMD_DETAIL_EQUAL_TYPE \
0173                 ( \
0174                 BOOST_VMD_TYPE_LIST, \
0175                 vtype1 \
0176                 ), \
0177             BOOST_PP_COMPL \
0178                 ( \
0179                 BOOST_VMD_IS_EMPTY_LIST(vseq1) \
0180                 ) \
0181             ) \
0182         ) \
0183 /**/
0184 
0185 #define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_TUPLE_D(d,vseq1,vtype1,type) \
0186     BOOST_PP_BITOR \
0187         ( \
0188         BOOST_VMD_DETAIL_EQUAL_TYPE_D \
0189             ( \
0190             d, \
0191             BOOST_VMD_TYPE_ARRAY, \
0192             vtype1 \
0193             ), \
0194         BOOST_PP_BITAND \
0195             ( \
0196             BOOST_VMD_DETAIL_EQUAL_TYPE_D \
0197                 ( \
0198                 d, \
0199                 BOOST_VMD_TYPE_LIST, \
0200                 vtype1 \
0201                 ), \
0202             BOOST_PP_COMPL \
0203                 ( \
0204                 BOOST_VMD_IS_EMPTY_LIST_D(d,vseq1) \
0205                 ) \
0206             ) \
0207         ) \
0208 /**/
0209 
0210 #define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_IDENTIFIER(vseq1,vtype1,type) \
0211     BOOST_VMD_IDENTITY_RESULT \
0212         ( \
0213         BOOST_PP_IIF \
0214             ( \
0215             BOOST_VMD_DETAIL_EQUAL_TYPE \
0216                 ( \
0217                 BOOST_VMD_TYPE_IDENTIFIER, \
0218                 type \
0219                 ), \
0220             BOOST_VMD_IS_IDENTIFIER, \
0221             BOOST_VMD_IDENTITY(0) \
0222             ) \
0223         (vseq1) \
0224         ) \
0225 /**/
0226 
0227 #define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_IDENTIFIER_D(d,vseq1,vtype1,type) \
0228     BOOST_VMD_IDENTITY_RESULT \
0229         ( \
0230         BOOST_PP_IIF \
0231             ( \
0232             BOOST_VMD_DETAIL_EQUAL_TYPE_D \
0233                 ( \
0234                 d, \
0235                 BOOST_VMD_TYPE_IDENTIFIER, \
0236                 type \
0237                 ), \
0238             BOOST_VMD_IS_IDENTIFIER_D, \
0239             BOOST_VMD_IDENTITY(0) \
0240             ) \
0241         (d,vseq1) \
0242         ) \
0243 /**/
0244 
0245 #define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK(vseq1,vtype1,type) \
0246     BOOST_PP_IIF \
0247         ( \
0248         BOOST_VMD_DETAIL_EQUAL_TYPE \
0249             ( \
0250             BOOST_VMD_TYPE_TUPLE, \
0251             type \
0252             ), \
0253         BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_TUPLE, \
0254         BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_IDENTIFIER \
0255         ) \
0256     (vseq1,vtype1,type) \
0257 /**/
0258 
0259 #define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_D(d,vseq1,vtype1,type) \
0260     BOOST_PP_IIF \
0261         ( \
0262         BOOST_VMD_DETAIL_EQUAL_TYPE_D \
0263             ( \
0264             d, \
0265             BOOST_VMD_TYPE_TUPLE, \
0266             type \
0267             ), \
0268         BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_TUPLE_D, \
0269         BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_IDENTIFIER_D \
0270         ) \
0271     (d,vseq1,vtype1,type) \
0272 /**/
0273 
0274 #define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE(vseq1,vtype1,type) \
0275     BOOST_VMD_IDENTITY_RESULT \
0276         ( \
0277         BOOST_PP_IIF \
0278             ( \
0279             BOOST_VMD_DETAIL_EQUAL_TYPE \
0280                 ( \
0281                 vtype1, \
0282                 type \
0283                 ), \
0284             BOOST_VMD_IDENTITY(1), \
0285             BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK \
0286             ) \
0287         (vseq1,vtype1,type)    \
0288         ) \
0289 /**/
0290 
0291 #define BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_D(d,vseq1,vtype1,type) \
0292     BOOST_VMD_IDENTITY_RESULT \
0293         ( \
0294         BOOST_PP_IIF \
0295             ( \
0296             BOOST_VMD_DETAIL_EQUAL_TYPE_D \
0297                 ( \
0298                 d, \
0299                 vtype1, \
0300                 type \
0301                 ), \
0302             BOOST_VMD_IDENTITY(1), \
0303             BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_CHECK_D \
0304             ) \
0305         (d,vseq1,vtype1,type)    \
0306         ) \
0307 /**/
0308 
0309 #define BOOST_VMD_DETAIL_EQUAL_WT_CHECK(vseq1,vseq2,vtype1,vtype2,type) \
0310     BOOST_VMD_IDENTITY_RESULT \
0311         ( \
0312         BOOST_PP_IIF \
0313             ( \
0314             BOOST_PP_BITAND \
0315                 ( \
0316                 BOOST_VMD_DETAIL_EQUAL_TYPE \
0317                     ( \
0318                     vtype1, \
0319                     vtype2 \
0320                     ), \
0321                 BOOST_VMD_IDENTITY_RESULT \
0322                     ( \
0323                     BOOST_PP_IIF \
0324                         ( \
0325                         BOOST_VMD_DETAIL_NOT_EMPTY(type), \
0326                         BOOST_VMD_DETAIL_EQUAL_TEST_TYPE, \
0327                         BOOST_VMD_IDENTITY(1) \
0328                         ) \
0329                     (vseq1,vtype1,type) \
0330                     ) \
0331                 ), \
0332             BOOST_VMD_DETAIL_EQUAL_CNI, \
0333             BOOST_VMD_IDENTITY(0) \
0334             ) \
0335         (vseq1,vseq2,vtype1) \
0336         ) \
0337 /**/
0338 
0339 #define BOOST_VMD_DETAIL_EQUAL_WT_CHECK_D(d,vseq1,vseq2,vtype1,vtype2,type) \
0340     BOOST_VMD_IDENTITY_RESULT \
0341         ( \
0342         BOOST_PP_IIF \
0343             ( \
0344             BOOST_PP_BITAND \
0345                 ( \
0346                 BOOST_VMD_DETAIL_EQUAL_TYPE_D \
0347                     ( \
0348                     d, \
0349                     vtype1, \
0350                     vtype2 \
0351                     ), \
0352                 BOOST_VMD_IDENTITY_RESULT \
0353                     ( \
0354                     BOOST_PP_IIF \
0355                         ( \
0356                         BOOST_VMD_DETAIL_NOT_EMPTY(type), \
0357                         BOOST_VMD_DETAIL_EQUAL_TEST_TYPE_D, \
0358                         BOOST_VMD_IDENTITY(1) \
0359                         ) \
0360                     (d,vseq1,vtype1,type) \
0361                     ) \
0362                 ), \
0363             BOOST_VMD_DETAIL_EQUAL_CNI_D, \
0364             BOOST_VMD_IDENTITY(0) \
0365             ) \
0366         (d,vseq1,vseq2,vtype1) \
0367         ) \
0368 /**/
0369 
0370 #define BOOST_VMD_DETAIL_EQUAL_WT_CONVERT(vseq1,vseq2,vtype1,vtype2,type) \
0371     BOOST_VMD_DETAIL_EQUAL_WT_CHECK \
0372         ( \
0373         vseq1, \
0374         vseq2, \
0375         BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq1,vtype1), \
0376         BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE(vseq2,vtype2), \
0377         type \
0378         ) \
0379 /**/
0380 
0381 #define BOOST_VMD_DETAIL_EQUAL_WT_CONVERT_D(d,vseq1,vseq2,vtype1,vtype2,type) \
0382     BOOST_VMD_DETAIL_EQUAL_WT_CHECK_D \
0383         ( \
0384         d, \
0385         vseq1, \
0386         vseq2, \
0387         BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq1,vtype1), \
0388         BOOST_VMD_DETAIL_ADJUST_TUPLE_TYPE_D(d,vseq2,vtype2), \
0389         type \
0390         ) \
0391 /**/
0392 
0393 #define BOOST_VMD_DETAIL_EQUAL_WT(vseq1,vseq2,vtype1,vtype2,type) \
0394     BOOST_VMD_IDENTITY_RESULT \
0395         ( \
0396         BOOST_PP_IIF \
0397             ( \
0398             BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH(vseq1,vseq2,vtype1,vtype2), \
0399             BOOST_VMD_IDENTITY(0), \
0400             BOOST_VMD_DETAIL_EQUAL_WT_CONVERT \
0401             ) \
0402         (vseq1,vseq2,vtype1,vtype2,type) \
0403         ) \
0404 /**/
0405 
0406 #define BOOST_VMD_DETAIL_EQUAL_WT_D(d,vseq1,vseq2,vtype1,vtype2,type) \
0407     BOOST_VMD_IDENTITY_RESULT \
0408         ( \
0409         BOOST_PP_IIF \
0410             ( \
0411             BOOST_VMD_DETAIL_EQUAL_IS_TUPLE_MISMATCH_D(d,vseq1,vseq2,vtype1,vtype2), \
0412             BOOST_VMD_IDENTITY(0), \
0413             BOOST_VMD_DETAIL_EQUAL_WT_CONVERT_D \
0414             ) \
0415         (d,vseq1,vseq2,vtype1,vtype2,type) \
0416         ) \
0417 /**/
0418 
0419 #define BOOST_VMD_DETAIL_EQUAL_GTYPE(vseq1,vseq2,type) \
0420     BOOST_VMD_DETAIL_EQUAL_WT \
0421         ( \
0422         vseq1, \
0423         vseq2, \
0424         BOOST_VMD_GET_TYPE(vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
0425         BOOST_VMD_GET_TYPE(vseq2,BOOST_VMD_RETURN_TYPE_TUPLE), \
0426         type \
0427         ) \
0428 /**/
0429 
0430 #define BOOST_VMD_DETAIL_EQUAL_GTYPE_D(d,vseq1,vseq2,type) \
0431     BOOST_VMD_DETAIL_EQUAL_WT_D \
0432         ( \
0433         d, \
0434         vseq1, \
0435         vseq2, \
0436         BOOST_VMD_GET_TYPE_D(d,vseq1,BOOST_VMD_RETURN_TYPE_TUPLE), \
0437         BOOST_VMD_GET_TYPE_D(d,vseq2,BOOST_VMD_RETURN_TYPE_TUPLE), \
0438         type \
0439         ) \
0440 /**/
0441 
0442 #define BOOST_VMD_DETAIL_EQUAL_EBP(vseq1,vseq2,be1,be2,type) \
0443     BOOST_VMD_IDENTITY_RESULT \
0444         ( \
0445         BOOST_PP_IIF \
0446             ( \
0447             BOOST_PP_BITAND \
0448                 ( \
0449                 BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
0450                 BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
0451                 ), \
0452             BOOST_VMD_DETAIL_EQUAL_GTYPE, \
0453             BOOST_VMD_IDENTITY(0) \
0454             ) \
0455         (vseq1,vseq2,type) \
0456         ) \
0457 /**/
0458 
0459 #define BOOST_VMD_DETAIL_EQUAL_EBP_D(d,vseq1,vseq2,be1,be2,type) \
0460     BOOST_VMD_IDENTITY_RESULT \
0461         ( \
0462         BOOST_PP_IIF \
0463             ( \
0464             BOOST_PP_BITAND \
0465                 ( \
0466                 BOOST_VMD_DETAIL_EQUAL_CHK_MATCH(be1,be2), \
0467                 BOOST_VMD_DETAIL_EQUAL_CHK_PARENS_MATCH(vseq1,vseq2) \
0468                 ), \
0469             BOOST_VMD_DETAIL_EQUAL_GTYPE_D, \
0470             BOOST_VMD_IDENTITY(0) \
0471             ) \
0472         (d,vseq1,vseq2,type) \
0473         ) \
0474 /**/
0475 
0476 #define BOOST_VMD_DETAIL_EQUAL_EMPTY(vseq1,vseq2,be1,be2,type) \
0477     BOOST_PP_IIF \
0478         ( \
0479         BOOST_PP_BITAND(be1,be2), \
0480         BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
0481         BOOST_VMD_DETAIL_EQUAL_EBP \
0482         ) \
0483     (vseq1,vseq2,be1,be2,type) \
0484 /**/
0485 
0486 #define BOOST_VMD_DETAIL_EQUAL_EMPTY_D(d,vseq1,vseq2,be1,be2,type) \
0487     BOOST_PP_IIF \
0488         ( \
0489         BOOST_PP_BITAND(be1,be2), \
0490         BOOST_VMD_DETAIL_EQUAL_BOTH_EMPTY, \
0491         BOOST_VMD_DETAIL_EQUAL_EBP_D \
0492         ) \
0493     (d,vseq1,vseq2,be1,be2,type) \
0494 /**/
0495 
0496 #define BOOST_VMD_DETAIL_EQUAL_OV0(vseq1,vseq2) \
0497     BOOST_VMD_DETAIL_EQUAL_EMPTY \
0498         ( \
0499         vseq1, \
0500         , \
0501         BOOST_VMD_IS_EMPTY(vseq1), \
0502         1, \
0503         ) \
0504 /**/
0505 
0506 #define BOOST_VMD_DETAIL_EQUAL_OV1(vseq1,vseq2) \
0507     BOOST_VMD_DETAIL_EQUAL_EMPTY \
0508         ( \
0509         vseq1, \
0510         vseq2, \
0511         BOOST_VMD_IS_EMPTY(vseq1), \
0512         BOOST_VMD_IS_EMPTY(vseq2), \
0513         ) \
0514 /**/
0515 
0516 #define BOOST_VMD_DETAIL_EQUAL_OV2(vseq1,vseq2,type) \
0517     BOOST_VMD_DETAIL_EQUAL_EMPTY \
0518         ( \
0519         vseq1, \
0520         vseq2, \
0521         BOOST_VMD_IS_EMPTY(vseq1), \
0522         BOOST_VMD_IS_EMPTY(vseq2), \
0523         type \
0524         ) \
0525 /**/
0526 
0527 #define BOOST_VMD_DETAIL_EQUAL_D_OV0(d,vseq1,vseq2) \
0528     BOOST_VMD_DETAIL_EQUAL_EMPTY_D \
0529         ( \
0530         d, \
0531         vseq1, \
0532         , \
0533         BOOST_VMD_IS_EMPTY(vseq1), \
0534         1, \
0535         ) \
0536 /**/
0537 
0538 #define BOOST_VMD_DETAIL_EQUAL_D_OV1(d,vseq1,vseq2) \
0539     BOOST_VMD_DETAIL_EQUAL_EMPTY_D \
0540         ( \
0541         d, \
0542         vseq1, \
0543         vseq2, \
0544         BOOST_VMD_IS_EMPTY(vseq1), \
0545         BOOST_VMD_IS_EMPTY(vseq2), \
0546         ) \
0547 /**/
0548 
0549 #define BOOST_VMD_DETAIL_EQUAL_D_OV2(d,vseq1,vseq2,type) \
0550     BOOST_VMD_DETAIL_EQUAL_EMPTY_D \
0551         ( \
0552         d, \
0553         vseq1, \
0554         vseq2, \
0555         BOOST_VMD_IS_EMPTY(vseq1), \
0556         BOOST_VMD_IS_EMPTY(vseq2), \
0557         type \
0558         ) \
0559 /**/
0560 
0561 #if BOOST_VMD_MSVC
0562 
0563 #define BOOST_VMD_DETAIL_EQUAL(vseq1,...) \
0564     BOOST_PP_CAT(BOOST_PP_OVERLOAD(BOOST_VMD_DETAIL_EQUAL_OV,__VA_ARGS__)(vseq1,__VA_ARGS__),BOOST_PP_EMPTY()) \
0565 /**/
0566 
0567 #define BOOST_VMD_DETAIL_EQUAL_D(d,vseq1,...) \
0568     BOOST_PP_CAT(BOOST_PP_OVERLOAD(BOOST_VMD_DETAIL_EQUAL_D_OV,__VA_ARGS__)(d,vseq1,__VA_ARGS__),BOOST_PP_EMPTY()) \
0569 /**/
0570 
0571 #else
0572 
0573 #define BOOST_VMD_DETAIL_EQUAL(vseq1,...) \
0574     BOOST_PP_OVERLOAD(BOOST_VMD_DETAIL_EQUAL_OV,__VA_ARGS__)(vseq1,__VA_ARGS__) \
0575 /**/
0576 
0577 #define BOOST_VMD_DETAIL_EQUAL_D(d,vseq1,...) \
0578     BOOST_PP_OVERLOAD(BOOST_VMD_DETAIL_EQUAL_D_OV,__VA_ARGS__)(d,vseq1,__VA_ARGS__) \
0579 /**/
0580 
0581 #endif
0582 
0583 #endif /* BOOST_VMD_DETAIL_EQUAL_HPP */