Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-30 10:02:16

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_SEQUENCE_ELEM_HPP)
0008 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_HPP
0009 
0010 #include <boost/preprocessor/arithmetic/dec.hpp>
0011 #include <boost/preprocessor/comparison/greater.hpp>
0012 #include <boost/preprocessor/control/expr_if.hpp>
0013 #include <boost/preprocessor/control/expr_iif.hpp>
0014 #include <boost/preprocessor/control/if.hpp>
0015 #include <boost/preprocessor/control/iif.hpp>
0016 #include <boost/preprocessor/logical/bitand.hpp>
0017 #include <boost/preprocessor/logical/bitor.hpp>
0018 #include <boost/preprocessor/logical/compl.hpp>
0019 #include <boost/preprocessor/seq/elem.hpp>
0020 #include <boost/preprocessor/seq/size.hpp>
0021 #include <boost/preprocessor/tuple/elem.hpp>
0022 #include <boost/preprocessor/tuple/push_back.hpp>
0023 #include <boost/preprocessor/tuple/replace.hpp>
0024 #include <boost/preprocessor/variadic/elem.hpp>
0025 #include <boost/vmd/empty.hpp>
0026 #include <boost/vmd/identity.hpp>
0027 #include <boost/vmd/is_empty.hpp>
0028 #include <boost/vmd/is_identifier.hpp>
0029 #include <boost/vmd/detail/empty_result.hpp>
0030 #include <boost/vmd/detail/equal_type.hpp>
0031 #include <boost/vmd/detail/match_identifier.hpp>
0032 #include <boost/vmd/detail/mods.hpp>
0033 #include <boost/vmd/detail/not_empty.hpp>
0034 #include <boost/vmd/detail/only_after.hpp>
0035 #include <boost/vmd/detail/sequence_common.hpp>
0036 
0037 /*
0038 
0039     Given modifications and the requested type, 
0040     determine whether or not we should be checking for specific identifiers
0041     
0042     1 = check for specific identifiers
0043     0 = do no check for specific identifiers
0044 
0045 */
0046 
0047 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_CHECK_FOR_IDENTIFIERS(nm,type) \
0048     BOOST_PP_BITAND \
0049         ( \
0050         BOOST_VMD_DETAIL_EQUAL_TYPE \
0051             ( \
0052             type, \
0053             BOOST_VMD_TYPE_IDENTIFIER \
0054             ), \
0055         BOOST_VMD_DETAIL_NOT_EMPTY \
0056             ( \
0057             BOOST_VMD_DETAIL_MODS_RESULT_OTHER(nm) \
0058             ) \
0059         ) \
0060 /**/
0061 
0062 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_CHECK_FOR_IDENTIFIERS_D(d,nm,type) \
0063     BOOST_PP_BITAND \
0064         ( \
0065         BOOST_VMD_DETAIL_EQUAL_TYPE_D \
0066             ( \
0067             d, \
0068             type, \
0069             BOOST_VMD_TYPE_IDENTIFIER \
0070             ), \
0071         BOOST_VMD_DETAIL_NOT_EMPTY \
0072             ( \
0073             BOOST_VMD_DETAIL_MODS_RESULT_OTHER(nm) \
0074             ) \
0075         ) \
0076 /**/
0077 
0078 /*
0079 
0080     Given modifications, determine whether or not an index should be part of the result
0081     
0082     1 = index should be part of the result
0083     0 = index should not be part of the result
0084 
0085 */
0086 
0087 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_IS_INDEX_RESULT(nm) \
0088     BOOST_PP_BITAND \
0089         ( \
0090         BOOST_VMD_DETAIL_MODS_IS_RESULT_INDEX(nm), \
0091         BOOST_PP_BITAND \
0092             ( \
0093             BOOST_VMD_DETAIL_EQUAL_TYPE \
0094                 ( \
0095                 BOOST_VMD_DETAIL_MODS_RESULT_TYPE(nm), \
0096                 BOOST_VMD_TYPE_IDENTIFIER \
0097                 ), \
0098             BOOST_VMD_DETAIL_NOT_EMPTY \
0099                 ( \
0100                 BOOST_VMD_DETAIL_MODS_RESULT_OTHER(nm) \
0101                 ) \
0102             ) \
0103         ) \
0104 /**/
0105 
0106 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_IS_INDEX_RESULT_D(d,nm) \
0107     BOOST_PP_BITAND \
0108         ( \
0109         BOOST_VMD_DETAIL_MODS_IS_RESULT_INDEX(nm), \
0110         BOOST_PP_BITAND \
0111             ( \
0112             BOOST_VMD_DETAIL_EQUAL_TYPE_D \
0113                 ( \
0114                 d, \
0115                 BOOST_VMD_DETAIL_MODS_RESULT_TYPE(nm), \
0116                 BOOST_VMD_TYPE_IDENTIFIER \
0117                 ), \
0118             BOOST_VMD_DETAIL_NOT_EMPTY \
0119                 ( \
0120                 BOOST_VMD_DETAIL_MODS_RESULT_OTHER(nm) \
0121                 ) \
0122             ) \
0123         ) \
0124 /**/
0125 
0126 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_INDEX(nm) \
0127     BOOST_PP_IIF \
0128         ( \
0129         BOOST_VMD_DETAIL_MODS_IS_RESULT_AFTER(nm), \
0130         (,,), \
0131         (,) \
0132         ) \
0133 /**/
0134 
0135 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_NO_INDEX(nm) \
0136     BOOST_PP_EXPR_IIF \
0137         ( \
0138         BOOST_VMD_DETAIL_MODS_IS_RESULT_AFTER(nm), \
0139         (,) \
0140         ) \
0141 /**/
0142 
0143 /*
0144 
0145     Returns a failure result given the modifications
0146 
0147 */
0148 
0149 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT(nm) \
0150     BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN \
0151         ( \
0152         BOOST_PP_IIF \
0153             ( \
0154             BOOST_VMD_DETAIL_SEQUENCE_ELEM_IS_INDEX_RESULT(nm), \
0155             BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_INDEX, \
0156             BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_NO_INDEX \
0157             ) \
0158         (nm),nm, \
0159         ) \
0160 /**/
0161 
0162 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_D(d,nm) \
0163     BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN \
0164         ( \
0165         BOOST_PP_IIF \
0166             ( \
0167             BOOST_VMD_DETAIL_SEQUENCE_ELEM_IS_INDEX_RESULT_D(d,nm), \
0168             BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_INDEX, \
0169             BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_NO_INDEX \
0170             ) \
0171         (nm),nm, \
0172         ) \
0173 /**/
0174 
0175 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE_TUPLE(res) \
0176     BOOST_PP_TUPLE_ELEM \
0177         ( \
0178         0, \
0179         BOOST_PP_TUPLE_ELEM(0,res) \
0180         ) \
0181 /**/
0182 
0183 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE_ONLY(res) \
0184     BOOST_PP_TUPLE_ELEM(0,res) \
0185 /**/
0186 
0187 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_TUPLE(res) \
0188     BOOST_PP_TUPLE_ELEM \
0189         ( \
0190         1, \
0191         BOOST_PP_TUPLE_ELEM(0,res) \
0192         ) \
0193 /**/
0194 
0195 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_ONLY(res) \
0196     BOOST_PP_TUPLE_ELEM(1,res) \
0197 /**/
0198 
0199 /*
0200 
0201   Gets the 'data' of the result given the result and modifications
0202 
0203 */
0204 
0205 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA(res,nm) \
0206     BOOST_PP_IIF \
0207         ( \
0208         BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER(nm), \
0209         BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_TUPLE, \
0210         BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_ONLY \
0211         ) \
0212     (res) \
0213 /**/
0214 
0215 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_D(d,res,nm) \
0216     BOOST_PP_IIF \
0217         ( \
0218         BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER_D(d,nm), \
0219         BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_TUPLE, \
0220         BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_ONLY \
0221         ) \
0222     (res) \
0223 /**/
0224 
0225 /*
0226 
0227   Gets the 'type' of the result given the result and modifications
0228 
0229 */
0230 
0231 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE(res,nm) \
0232     BOOST_PP_IIF \
0233         ( \
0234         BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER(nm), \
0235         BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE_TUPLE, \
0236         BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE_ONLY \
0237         ) \
0238     (res) \
0239 /**/
0240 
0241 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE_D(d,res,nm) \
0242     BOOST_PP_IIF \
0243         ( \
0244         BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER_D(d,nm), \
0245         BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE_TUPLE, \
0246         BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE_ONLY \
0247         ) \
0248     (res) \
0249 /**/
0250 
0251 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_HAS_FAILED_TUPLE(res) \
0252     BOOST_VMD_IS_EMPTY \
0253         ( \
0254         BOOST_PP_TUPLE_ELEM(0,res) \
0255         ) \
0256 /**/
0257 
0258 /*
0259 
0260     Determines whether the result from the element access has failed or not
0261     
0262     returns 1 if it has failed, otherwise 0.
0263 
0264 */
0265 
0266 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_HAS_FAILED(res,nm) \
0267     BOOST_PP_IIF \
0268         ( \
0269         BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER(nm), \
0270         BOOST_VMD_DETAIL_SEQUENCE_ELEM_HAS_FAILED_TUPLE, \
0271         BOOST_VMD_IS_EMPTY \
0272         ) \
0273     (res) \
0274 /**/
0275 
0276 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_HAS_FAILED_D(d,res,nm) \
0277     BOOST_PP_IIF \
0278         ( \
0279         BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER_D(d,nm), \
0280         BOOST_VMD_DETAIL_SEQUENCE_ELEM_HAS_FAILED_TUPLE, \
0281         BOOST_VMD_IS_EMPTY \
0282         ) \
0283     (res) \
0284 /**/
0285 
0286 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_ONLY_CHELM(seq,elem) \
0287     BOOST_PP_IIF \
0288         ( \
0289         BOOST_PP_GREATER(BOOST_PP_SEQ_SIZE(seq),elem), \
0290         BOOST_PP_SEQ_ELEM, \
0291         BOOST_VMD_EMPTY \
0292         ) \
0293     (elem,seq) \
0294 /**/
0295 
0296 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_ONLY_CHELM_D(d,seq,elem) \
0297     BOOST_PP_IIF \
0298         ( \
0299         BOOST_PP_GREATER_D(d,BOOST_PP_SEQ_SIZE(seq),elem), \
0300         BOOST_PP_SEQ_ELEM, \
0301         BOOST_VMD_EMPTY \
0302         ) \
0303     (elem,seq) \
0304 /**/
0305 
0306 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_CHELM_RES(data,elem) \
0307     ( \
0308     BOOST_PP_SEQ_ELEM(elem,BOOST_PP_TUPLE_ELEM(0,data)), \
0309     BOOST_PP_TUPLE_ELEM(1,data) \
0310     ) \
0311 /**/
0312 
0313 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_CHELM(data,elem) \
0314     BOOST_PP_IIF \
0315         ( \
0316         BOOST_PP_GREATER(BOOST_PP_SEQ_SIZE(BOOST_PP_TUPLE_ELEM(0,data)),elem), \
0317         BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_CHELM_RES, \
0318         BOOST_VMD_DETAIL_EMPTY_RESULT \
0319         ) \
0320     (data,elem) \
0321 /**/
0322 
0323 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_CHELM_D(d,data,elem) \
0324     BOOST_PP_IIF \
0325         ( \
0326         BOOST_PP_GREATER_D(d,BOOST_PP_SEQ_SIZE(BOOST_PP_TUPLE_ELEM(0,data)),elem), \
0327         BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_CHELM_RES, \
0328         BOOST_VMD_DETAIL_EMPTY_RESULT \
0329         ) \
0330     (data,elem) \
0331 /**/
0332 
0333 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_ONLY(seq,elem) \
0334     BOOST_PP_IIF \
0335         ( \
0336         BOOST_VMD_IS_EMPTY(seq), \
0337         BOOST_VMD_EMPTY, \
0338         BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_ONLY_CHELM \
0339         ) \
0340     (seq,elem) \
0341 /**/
0342 
0343 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_ONLY_D(d,seq,elem) \
0344     BOOST_PP_IIF \
0345         ( \
0346         BOOST_VMD_IS_EMPTY(seq), \
0347         BOOST_VMD_EMPTY, \
0348         BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_ONLY_CHELM_D \
0349         ) \
0350     (d,seq,elem) \
0351 /**/
0352 
0353 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER(data,elem) \
0354     BOOST_PP_IIF \
0355         ( \
0356         BOOST_VMD_IS_EMPTY(BOOST_PP_TUPLE_ELEM(0,data)), \
0357         BOOST_VMD_DETAIL_EMPTY_RESULT, \
0358         BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_CHELM \
0359         ) \
0360     (data,elem) \
0361 /**/
0362 
0363 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_D(d,data,elem) \
0364     BOOST_PP_IIF \
0365         ( \
0366         BOOST_VMD_IS_EMPTY(BOOST_PP_TUPLE_ELEM(0,data)), \
0367         BOOST_VMD_DETAIL_EMPTY_RESULT, \
0368         BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_CHELM_D \
0369         ) \
0370     (d,data,elem) \
0371 /**/
0372 
0373 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ(seq,elem,nm) \
0374     BOOST_PP_IIF \
0375         ( \
0376         BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER(nm), \
0377         BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER, \
0378         BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_ONLY \
0379         ) \
0380     (seq,elem) \
0381 /**/
0382 
0383 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_D(d,seq,elem,nm) \
0384     BOOST_PP_IIF \
0385         ( \
0386         BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER_D(d,nm), \
0387         BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_D, \
0388         BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_ONLY_D \
0389         ) \
0390     (d,seq,elem) \
0391 /**/
0392 
0393 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_VSEQ(...) \
0394     BOOST_PP_VARIADIC_ELEM(0,__VA_ARGS__) \
0395 /**/
0396 
0397 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PROCESS(elem,vseq,nm) \
0398     BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ \
0399         ( \
0400         BOOST_VMD_DETAIL_SEQUENCE_ELEM_PROCESS_TUPLE \
0401             ( \
0402             vseq, \
0403             elem, \
0404             BOOST_VMD_TYPE_SEQ, \
0405             nm \
0406             ), \
0407         elem, \
0408         nm \
0409         ) \
0410 /**/
0411 
0412 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PROCESS_D(d,elem,vseq,nm) \
0413     BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_D \
0414         ( \
0415         d, \
0416         BOOST_VMD_DETAIL_SEQUENCE_ELEM_PROCESS_TUPLE_D \
0417             ( \
0418             d, \
0419             vseq, \
0420             elem, \
0421             BOOST_VMD_TYPE_SEQ, \
0422             nm \
0423             ), \
0424         elem, \
0425         nm \
0426         ) \
0427 /**/
0428 
0429 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_EMPTY(elem,vseq,nm) \
0430     BOOST_PP_EXPR_IIF \
0431         ( \
0432         BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER(nm), \
0433         (,) \
0434         ) \
0435 /**/
0436 
0437 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_EMPTY_D(d,elem,vseq,nm) \
0438     BOOST_PP_EXPR_IIF \
0439         ( \
0440         BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER_D(d,nm), \
0441         (,) \
0442         ) \
0443 /**/
0444 
0445 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_CE(elem,vseq,nm) \
0446     BOOST_PP_IIF \
0447         ( \
0448         BOOST_VMD_DETAIL_NOT_EMPTY(vseq), \
0449         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PROCESS, \
0450         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_EMPTY \
0451         ) \
0452     (elem,vseq,nm) \
0453 /**/
0454 
0455 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_CE_D(d,elem,vseq,nm) \
0456     BOOST_PP_IIF \
0457         ( \
0458         BOOST_VMD_DETAIL_NOT_EMPTY(vseq), \
0459         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PROCESS_D, \
0460         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_EMPTY_D \
0461         ) \
0462     (d,elem,vseq,nm) \
0463 /**/
0464 
0465 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN_D(d,res,nm,type) \
0466     BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN(res,nm,type) \
0467 /**/
0468 
0469 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN(res,nm,type) \
0470     BOOST_VMD_IDENTITY_RESULT \
0471         ( \
0472         BOOST_PP_IIF \
0473             ( \
0474             BOOST_VMD_DETAIL_MODS_IS_RESULT_ONLY_AFTER(nm), \
0475             BOOST_PP_TUPLE_ELEM, \
0476             BOOST_VMD_IDENTITY(res) \
0477             ) \
0478         (1,res) \
0479         ) \
0480 /**/
0481 
0482 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_INDEX_JRES(data,index) \
0483     BOOST_PP_IF \
0484         ( \
0485         index, \
0486         (data,BOOST_PP_DEC(index)), \
0487         (,) \
0488         ) \
0489 /**/
0490 
0491 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_JRES(data,index) \
0492     BOOST_PP_EXPR_IF \
0493         ( \
0494         index, \
0495         data \
0496         ) \
0497 /**/
0498 
0499 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_MATCH(data,nm,index) \
0500     BOOST_PP_IIF \
0501         ( \
0502         BOOST_VMD_DETAIL_MODS_IS_RESULT_INDEX(nm), \
0503         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_INDEX_JRES, \
0504         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_JRES \
0505         ) \
0506     (data,index) \
0507 /**/
0508 
0509 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_ID_TUP(data,nm) \
0510     BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_MATCH \
0511         ( \
0512         data, \
0513         nm, \
0514         BOOST_VMD_DETAIL_MATCH_IDENTIFIER \
0515             ( \
0516             data, \
0517             BOOST_VMD_DETAIL_MODS_RESULT_OTHER(nm) \
0518             ) \
0519         ) \
0520 /**/
0521 
0522 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_ID_TUP_D(d,data,nm) \
0523     BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_MATCH \
0524         ( \
0525         data, \
0526         nm, \
0527         BOOST_VMD_DETAIL_MATCH_IDENTIFIER_D \
0528             ( \
0529             d, \
0530             data, \
0531             BOOST_VMD_DETAIL_MODS_RESULT_OTHER(nm) \
0532             ) \
0533         ) \
0534 /**/
0535 
0536 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_ID(data,nm,type) \
0537     BOOST_VMD_IDENTITY_RESULT \
0538         ( \
0539         BOOST_PP_IIF \
0540             ( \
0541             BOOST_VMD_DETAIL_SEQUENCE_ELEM_CHECK_FOR_IDENTIFIERS(nm,type), \
0542             BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_ID_TUP,    \
0543             BOOST_VMD_IDENTITY(data) \
0544             ) \
0545         (data,nm) \
0546         ) \
0547 /**/
0548 
0549 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_ID_D(d,data,nm,type) \
0550     BOOST_VMD_IDENTITY_RESULT \
0551         ( \
0552         BOOST_PP_IIF \
0553             ( \
0554             BOOST_VMD_DETAIL_SEQUENCE_ELEM_CHECK_FOR_IDENTIFIERS_D(d,nm,type), \
0555             BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_ID_TUP_D,    \
0556             BOOST_VMD_IDENTITY(data) \
0557             ) \
0558         (d,data,nm) \
0559         ) \
0560 /**/
0561 
0562 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY(res,nm,type) \
0563     BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_ID \
0564         ( \
0565         BOOST_PP_TUPLE_ELEM(1,res), \
0566         nm, \
0567         type \
0568         ) \
0569 /**/
0570 
0571 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_D(d,res,nm,type) \
0572     BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_ID_D \
0573         ( \
0574         d, \
0575         BOOST_PP_TUPLE_ELEM(1,res), \
0576         nm, \
0577         type \
0578         ) \
0579 /**/
0580 
0581 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_CHANGE(res,nm,type) \
0582     BOOST_PP_TUPLE_REPLACE \
0583         ( \
0584         res, \
0585         0, \
0586         BOOST_PP_TUPLE_ELEM \
0587             ( \
0588             1, \
0589             BOOST_PP_TUPLE_ELEM(0,res) \
0590             ) \
0591         ) \
0592 /**/
0593 
0594 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_CHANGE_D(d,res,nm,type) \
0595     BOOST_PP_TUPLE_REPLACE_D \
0596         ( \
0597         d, \
0598         res, \
0599         0, \
0600         BOOST_PP_TUPLE_ELEM \
0601             ( \
0602             1, \
0603             BOOST_PP_TUPLE_ELEM(0,res) \
0604             ) \
0605         ) \
0606 /**/
0607 
0608 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ONLY_CAFTER(res,nm,type) \
0609     BOOST_PP_IIF \
0610         ( \
0611         BOOST_VMD_DETAIL_MODS_IS_RESULT_ONLY_AFTER(nm), \
0612         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN, \
0613         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_CHANGE \
0614         ) \
0615     (res,nm,type) \
0616 /**/
0617 
0618 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ONLY_CAFTER_D(d,res,nm,type) \
0619     BOOST_PP_IIF \
0620         ( \
0621         BOOST_VMD_DETAIL_MODS_IS_RESULT_ONLY_AFTER(nm), \
0622         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN_D, \
0623         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_CHANGE_D \
0624         ) \
0625     (d,res,nm,type) \
0626 /**/
0627 
0628 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_SUCCESS(res,nm,type,index) \
0629     BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ONLY_CAFTER \
0630         ( \
0631         BOOST_PP_TUPLE_PUSH_BACK(res,BOOST_PP_DEC(index)), \
0632         nm, \
0633         type \
0634         ) \
0635 /**/
0636 
0637 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_SUCCESS_D(d,res,nm,type,index) \
0638     BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ONLY_CAFTER_D \
0639         ( \
0640         d, \
0641         BOOST_PP_TUPLE_PUSH_BACK(res,BOOST_PP_DEC(index)), \
0642         nm, \
0643         type \
0644         ) \
0645 /**/
0646 
0647 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_FAILURE(res,nm,type,index) \
0648     BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT(nm) \
0649 /**/
0650 
0651 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_FAILURE_D(d,res,nm,type,index) \
0652     BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_D(d,nm) \
0653 /**/
0654 
0655 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_INDEX_JRES(res,nm,type,index) \
0656     BOOST_PP_IF \
0657         ( \
0658         index, \
0659         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_SUCCESS, \
0660         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_FAILURE \
0661         ) \
0662     (res,nm,type,index)    \
0663 /**/
0664 
0665 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_INDEX_JRES_D(d,res,nm,type,index) \
0666     BOOST_PP_IF \
0667         ( \
0668         index, \
0669         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_SUCCESS_D, \
0670         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_FAILURE_D \
0671         ) \
0672     (d,res,nm,type,index)    \
0673 /**/
0674 
0675 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_JRES_FAILURE(res,nm,type) \
0676     BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT(nm) \
0677 /**/
0678 
0679 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_JRES_FAILURE_D(d,res,nm,type) \
0680     BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_D(d,nm) \
0681 /**/
0682 
0683 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_JRES(res,nm,type,index) \
0684     BOOST_PP_IF \
0685         ( \
0686         index, \
0687         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ONLY_CAFTER, \
0688         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_JRES_FAILURE \
0689         ) \
0690     (res,nm,type) \
0691 /**/
0692 
0693 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_JRES_D(d,res,nm,type,index) \
0694     BOOST_PP_IF \
0695         ( \
0696         index, \
0697         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ONLY_CAFTER_D, \
0698         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_JRES_FAILURE_D \
0699         ) \
0700     (d,res,nm,type) \
0701 /**/
0702 
0703 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ID_RES(res,nm,type,index) \
0704     BOOST_PP_IIF \
0705         ( \
0706         BOOST_VMD_DETAIL_MODS_IS_RESULT_INDEX(nm), \
0707         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_INDEX_JRES, \
0708         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_JRES \
0709         ) \
0710     (res,nm,type,index)    \
0711 /**/
0712 
0713 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ID_RES_D(d,res,nm,type,index) \
0714     BOOST_PP_IIF \
0715         ( \
0716         BOOST_VMD_DETAIL_MODS_IS_RESULT_INDEX(nm), \
0717         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_INDEX_JRES_D, \
0718         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_JRES_D \
0719         ) \
0720     (d,res,nm,type,index)    \
0721 /**/
0722 
0723 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ID(res,nm,type) \
0724     BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ID_RES \
0725         ( \
0726         res, \
0727         nm, \
0728         type, \
0729         BOOST_VMD_DETAIL_MATCH_IDENTIFIER \
0730             ( \
0731             BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA(res,nm), \
0732             BOOST_VMD_DETAIL_MODS_RESULT_OTHER(nm) \
0733             ) \
0734         ) \
0735 /**/
0736 
0737 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ID_D(d,res,nm,type) \
0738     BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ID_RES_D \
0739         ( \
0740         d, \
0741         res, \
0742         nm, \
0743         type, \
0744         BOOST_VMD_DETAIL_MATCH_IDENTIFIER_D \
0745             ( \
0746             d, \
0747             BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_D(d,res,nm), \
0748             BOOST_VMD_DETAIL_MODS_RESULT_OTHER(nm) \
0749             ) \
0750         ) \
0751 /**/
0752 
0753 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT(res,nm,type) \
0754     BOOST_PP_IIF \
0755         ( \
0756         BOOST_VMD_DETAIL_SEQUENCE_ELEM_CHECK_FOR_IDENTIFIERS(nm,type), \
0757         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ID, \
0758         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ONLY_CAFTER \
0759         ) \
0760     (res,nm,type) \
0761 /**/
0762 
0763 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_D(d,res,nm,type) \
0764     BOOST_PP_IIF \
0765         ( \
0766         BOOST_VMD_DETAIL_SEQUENCE_ELEM_CHECK_FOR_IDENTIFIERS_D(d,nm,type), \
0767         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ID_D, \
0768         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ONLY_CAFTER_D \
0769         ) \
0770     (d,res,nm,type) \
0771 /**/
0772 
0773 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK(res,nm,type) \
0774     BOOST_PP_IIF \
0775         ( \
0776         BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER(nm), \
0777         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT, \
0778         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY \
0779         ) \
0780     (res,nm,type) \
0781 /**/
0782 
0783 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_D(d,res,nm,type) \
0784     BOOST_PP_IIF \
0785         ( \
0786         BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER_D(d,nm), \
0787         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_D, \
0788         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_D \
0789         ) \
0790     (d,res,nm,type) \
0791 /**/
0792 
0793 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_FAILED(res,nm,type) \
0794     BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT(nm) \
0795 /**/
0796 
0797 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_FAILED_D(d,res,nm,type) \
0798     BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_D(d,nm) \
0799 /**/
0800 
0801 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_ID(res,nm,type) \
0802     BOOST_VMD_IS_IDENTIFIER \
0803         ( \
0804         BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA(res,nm) \
0805         ) \
0806 /**/
0807 
0808 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_ID_D(d,res,nm,type) \
0809     BOOST_VMD_IS_IDENTIFIER_D \
0810         ( \
0811         d, \
0812         BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_D(d,res,nm) \
0813         ) \
0814 /**/
0815 
0816 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_OTHER(res,nm,type) \
0817     BOOST_VMD_DETAIL_EQUAL_TYPE \
0818         ( \
0819         BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE(res,nm), \
0820         type \
0821         ) \
0822 /**/
0823 
0824 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_OTHER_D(d,res,nm,type) \
0825     BOOST_VMD_DETAIL_EQUAL_TYPE_D \
0826         ( \
0827         d, \
0828         BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE_D(d,res,nm), \
0829         type \
0830         ) \
0831 /**/
0832 
0833 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE(res,nm,type) \
0834     BOOST_PP_IIF \
0835         ( \
0836         BOOST_VMD_DETAIL_EQUAL_TYPE \
0837             ( \
0838             BOOST_VMD_TYPE_IDENTIFIER, \
0839             type \
0840             ), \
0841         BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_ID, \
0842         BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_OTHER \
0843         ) \
0844     (res,nm,type) \
0845 /**/
0846 
0847 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_D(d,res,nm,type) \
0848     BOOST_PP_IIF \
0849         ( \
0850         BOOST_VMD_DETAIL_EQUAL_TYPE_D \
0851             ( \
0852             d, \
0853             BOOST_VMD_TYPE_IDENTIFIER, \
0854             type \
0855             ), \
0856         BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_ID_D, \
0857         BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_OTHER_D \
0858         ) \
0859     (d,res,nm,type) \
0860 /**/
0861 
0862 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT(res,nm,type) \
0863     BOOST_PP_IIF \
0864         ( \
0865         BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE(res,nm,type), \
0866         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK, \
0867         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_FAILED \
0868         ) \
0869     (res,nm,type) \
0870 /**/
0871 
0872 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_D(d,res,nm,type) \
0873     BOOST_PP_IIF \
0874         ( \
0875         BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_D(d,res,nm,type), \
0876         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_D, \
0877         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_FAILED_D \
0878         ) \
0879     (d,res,nm,type) \
0880 /**/
0881 
0882 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_NF(res,nm,type) \
0883     BOOST_PP_IIF \
0884         ( \
0885         BOOST_VMD_IS_EMPTY(type), \
0886         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN, \
0887         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT \
0888         ) \
0889     (res,nm,type) \
0890 /**/
0891 
0892 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_NF_D(d,res,nm,type) \
0893     BOOST_PP_IIF \
0894         ( \
0895         BOOST_VMD_IS_EMPTY(type), \
0896         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN_D, \
0897         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_D \
0898         ) \
0899     (d,res,nm,type) \
0900 /**/
0901 
0902 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_FAILED(res,nm,type) \
0903     BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT(nm) \
0904 /**/
0905 
0906 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_FAILED_D(d,res,nm,type) \
0907     BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_D(d,nm) \
0908 /**/
0909 
0910 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE(res,nm,type) \
0911     BOOST_PP_IIF \
0912         ( \
0913         BOOST_VMD_DETAIL_SEQUENCE_ELEM_HAS_FAILED(res,nm), \
0914         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_FAILED, \
0915         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_NF \
0916         ) \
0917     (res,nm,type) \
0918 /**/
0919 
0920 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_D(d,res,nm,type) \
0921     BOOST_PP_IIF \
0922         ( \
0923         BOOST_VMD_DETAIL_SEQUENCE_ELEM_HAS_FAILED_D(d,res,nm), \
0924         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_FAILED_D, \
0925         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_NF_D \
0926         ) \
0927     (d,res,nm,type) \
0928 /**/
0929 
0930 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_COA(res,nm) \
0931     BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE \
0932         ( \
0933         res, \
0934         nm, \
0935         BOOST_VMD_DETAIL_MODS_RESULT_TYPE(nm) \
0936         ) \
0937 /**/
0938 
0939 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_COA_D(d,res,nm) \
0940     BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_D \
0941         ( \
0942         d, \
0943         res, \
0944         nm, \
0945         BOOST_VMD_DETAIL_MODS_RESULT_TYPE(nm) \
0946         ) \
0947 /**/
0948 
0949 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM(elem,vseq,nm) \
0950     BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_COA \
0951         ( \
0952         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_CE(elem,vseq,nm), \
0953         nm \
0954         ) \
0955 /**/
0956 
0957 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_D(d,elem,vseq,nm) \
0958     BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_COA_D \
0959         ( \
0960         d, \
0961         BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_CE_D(d,elem,vseq,nm), \
0962         nm \
0963         ) \
0964 /**/
0965 
0966 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM(allow,elem,...) \
0967     BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM \
0968         ( \
0969         elem, \
0970         BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_VSEQ(__VA_ARGS__), \
0971         BOOST_VMD_DETAIL_NEW_MODS(allow,__VA_ARGS__) \
0972         ) \
0973 /**/
0974 
0975 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_D(d,allow,elem,...) \
0976     BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_D \
0977         ( \
0978         d, \
0979         elem, \
0980         BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_VSEQ(__VA_ARGS__), \
0981         BOOST_VMD_DETAIL_NEW_MODS_D(d,allow,__VA_ARGS__) \
0982         ) \
0983 /**/
0984 
0985 #endif /* BOOST_VMD_DETAIL_SEQUENCE_ELEM_HPP */