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_SEQUENCE_ELEM_HPP) 8 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_HPP 9 10 #include <boost/preprocessor/arithmetic/dec.hpp> 11 #include <boost/preprocessor/comparison/greater.hpp> 12 #include <boost/preprocessor/control/expr_if.hpp> 13 #include <boost/preprocessor/control/expr_iif.hpp> 14 #include <boost/preprocessor/control/if.hpp> 15 #include <boost/preprocessor/control/iif.hpp> 16 #include <boost/preprocessor/logical/bitand.hpp> 17 #include <boost/preprocessor/logical/bitor.hpp> 18 #include <boost/preprocessor/logical/compl.hpp> 19 #include <boost/preprocessor/seq/elem.hpp> 20 #include <boost/preprocessor/seq/size.hpp> 21 #include <boost/preprocessor/tuple/elem.hpp> 22 #include <boost/preprocessor/tuple/push_back.hpp> 23 #include <boost/preprocessor/tuple/replace.hpp> 24 #include <boost/preprocessor/variadic/elem.hpp> 25 #include <boost/vmd/empty.hpp> 26 #include <boost/vmd/identity.hpp> 27 #include <boost/vmd/is_empty.hpp> 28 #include <boost/vmd/is_identifier.hpp> 29 #include <boost/vmd/detail/empty_result.hpp> 30 #include <boost/vmd/detail/equal_type.hpp> 31 #include <boost/vmd/detail/match_identifier.hpp> 32 #include <boost/vmd/detail/mods.hpp> 33 #include <boost/vmd/detail/not_empty.hpp> 34 #include <boost/vmd/detail/only_after.hpp> 35 #include <boost/vmd/detail/sequence_common.hpp> 36 37 /* 38 39 Given modifications and the requested type, 40 determine whether or not we should be checking for specific identifiers 41 42 1 = check for specific identifiers 43 0 = do no check for specific identifiers 44 45 */ 46 47 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_CHECK_FOR_IDENTIFIERS(nm,type) \ 48 BOOST_PP_BITAND \ 49 ( \ 50 BOOST_VMD_DETAIL_EQUAL_TYPE \ 51 ( \ 52 type, \ 53 BOOST_VMD_TYPE_IDENTIFIER \ 54 ), \ 55 BOOST_VMD_DETAIL_NOT_EMPTY \ 56 ( \ 57 BOOST_VMD_DETAIL_MODS_RESULT_OTHER(nm) \ 58 ) \ 59 ) \ 60 /**/ 61 62 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_CHECK_FOR_IDENTIFIERS_D(d,nm,type) \ 63 BOOST_PP_BITAND \ 64 ( \ 65 BOOST_VMD_DETAIL_EQUAL_TYPE_D \ 66 ( \ 67 d, \ 68 type, \ 69 BOOST_VMD_TYPE_IDENTIFIER \ 70 ), \ 71 BOOST_VMD_DETAIL_NOT_EMPTY \ 72 ( \ 73 BOOST_VMD_DETAIL_MODS_RESULT_OTHER(nm) \ 74 ) \ 75 ) \ 76 /**/ 77 78 /* 79 80 Given modifications, determine whether or not an index should be part of the result 81 82 1 = index should be part of the result 83 0 = index should not be part of the result 84 85 */ 86 87 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_IS_INDEX_RESULT(nm) \ 88 BOOST_PP_BITAND \ 89 ( \ 90 BOOST_VMD_DETAIL_MODS_IS_RESULT_INDEX(nm), \ 91 BOOST_PP_BITAND \ 92 ( \ 93 BOOST_VMD_DETAIL_EQUAL_TYPE \ 94 ( \ 95 BOOST_VMD_DETAIL_MODS_RESULT_TYPE(nm), \ 96 BOOST_VMD_TYPE_IDENTIFIER \ 97 ), \ 98 BOOST_VMD_DETAIL_NOT_EMPTY \ 99 ( \ 100 BOOST_VMD_DETAIL_MODS_RESULT_OTHER(nm) \ 101 ) \ 102 ) \ 103 ) \ 104 /**/ 105 106 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_IS_INDEX_RESULT_D(d,nm) \ 107 BOOST_PP_BITAND \ 108 ( \ 109 BOOST_VMD_DETAIL_MODS_IS_RESULT_INDEX(nm), \ 110 BOOST_PP_BITAND \ 111 ( \ 112 BOOST_VMD_DETAIL_EQUAL_TYPE_D \ 113 ( \ 114 d, \ 115 BOOST_VMD_DETAIL_MODS_RESULT_TYPE(nm), \ 116 BOOST_VMD_TYPE_IDENTIFIER \ 117 ), \ 118 BOOST_VMD_DETAIL_NOT_EMPTY \ 119 ( \ 120 BOOST_VMD_DETAIL_MODS_RESULT_OTHER(nm) \ 121 ) \ 122 ) \ 123 ) \ 124 /**/ 125 126 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_INDEX(nm) \ 127 BOOST_PP_IIF \ 128 ( \ 129 BOOST_VMD_DETAIL_MODS_IS_RESULT_AFTER(nm), \ 130 (,,), \ 131 (,) \ 132 ) \ 133 /**/ 134 135 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_NO_INDEX(nm) \ 136 BOOST_PP_EXPR_IIF \ 137 ( \ 138 BOOST_VMD_DETAIL_MODS_IS_RESULT_AFTER(nm), \ 139 (,) \ 140 ) \ 141 /**/ 142 143 /* 144 145 Returns a failure result given the modifications 146 147 */ 148 149 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT(nm) \ 150 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN \ 151 ( \ 152 BOOST_PP_IIF \ 153 ( \ 154 BOOST_VMD_DETAIL_SEQUENCE_ELEM_IS_INDEX_RESULT(nm), \ 155 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_INDEX, \ 156 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_NO_INDEX \ 157 ) \ 158 (nm),nm, \ 159 ) \ 160 /**/ 161 162 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_D(d,nm) \ 163 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN \ 164 ( \ 165 BOOST_PP_IIF \ 166 ( \ 167 BOOST_VMD_DETAIL_SEQUENCE_ELEM_IS_INDEX_RESULT_D(d,nm), \ 168 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_INDEX, \ 169 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_NO_INDEX \ 170 ) \ 171 (nm),nm, \ 172 ) \ 173 /**/ 174 175 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE_TUPLE(res) \ 176 BOOST_PP_TUPLE_ELEM \ 177 ( \ 178 0, \ 179 BOOST_PP_TUPLE_ELEM(0,res) \ 180 ) \ 181 /**/ 182 183 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE_ONLY(res) \ 184 BOOST_PP_TUPLE_ELEM(0,res) \ 185 /**/ 186 187 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_TUPLE(res) \ 188 BOOST_PP_TUPLE_ELEM \ 189 ( \ 190 1, \ 191 BOOST_PP_TUPLE_ELEM(0,res) \ 192 ) \ 193 /**/ 194 195 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_ONLY(res) \ 196 BOOST_PP_TUPLE_ELEM(1,res) \ 197 /**/ 198 199 /* 200 201 Gets the 'data' of the result given the result and modifications 202 203 */ 204 205 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA(res,nm) \ 206 BOOST_PP_IIF \ 207 ( \ 208 BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER(nm), \ 209 BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_TUPLE, \ 210 BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_ONLY \ 211 ) \ 212 (res) \ 213 /**/ 214 215 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_D(d,res,nm) \ 216 BOOST_PP_IIF \ 217 ( \ 218 BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER_D(d,nm), \ 219 BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_TUPLE, \ 220 BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_ONLY \ 221 ) \ 222 (res) \ 223 /**/ 224 225 /* 226 227 Gets the 'type' of the result given the result and modifications 228 229 */ 230 231 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE(res,nm) \ 232 BOOST_PP_IIF \ 233 ( \ 234 BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER(nm), \ 235 BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE_TUPLE, \ 236 BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE_ONLY \ 237 ) \ 238 (res) \ 239 /**/ 240 241 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE_D(d,res,nm) \ 242 BOOST_PP_IIF \ 243 ( \ 244 BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER_D(d,nm), \ 245 BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE_TUPLE, \ 246 BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE_ONLY \ 247 ) \ 248 (res) \ 249 /**/ 250 251 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_HAS_FAILED_TUPLE(res) \ 252 BOOST_VMD_IS_EMPTY \ 253 ( \ 254 BOOST_PP_TUPLE_ELEM(0,res) \ 255 ) \ 256 /**/ 257 258 /* 259 260 Determines whether the result from the element access has failed or not 261 262 returns 1 if it has failed, otherwise 0. 263 264 */ 265 266 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_HAS_FAILED(res,nm) \ 267 BOOST_PP_IIF \ 268 ( \ 269 BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER(nm), \ 270 BOOST_VMD_DETAIL_SEQUENCE_ELEM_HAS_FAILED_TUPLE, \ 271 BOOST_VMD_IS_EMPTY \ 272 ) \ 273 (res) \ 274 /**/ 275 276 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_HAS_FAILED_D(d,res,nm) \ 277 BOOST_PP_IIF \ 278 ( \ 279 BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER_D(d,nm), \ 280 BOOST_VMD_DETAIL_SEQUENCE_ELEM_HAS_FAILED_TUPLE, \ 281 BOOST_VMD_IS_EMPTY \ 282 ) \ 283 (res) \ 284 /**/ 285 286 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_ONLY_CHELM(seq,elem) \ 287 BOOST_PP_IIF \ 288 ( \ 289 BOOST_PP_GREATER(BOOST_PP_SEQ_SIZE(seq),elem), \ 290 BOOST_PP_SEQ_ELEM, \ 291 BOOST_VMD_EMPTY \ 292 ) \ 293 (elem,seq) \ 294 /**/ 295 296 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_ONLY_CHELM_D(d,seq,elem) \ 297 BOOST_PP_IIF \ 298 ( \ 299 BOOST_PP_GREATER_D(d,BOOST_PP_SEQ_SIZE(seq),elem), \ 300 BOOST_PP_SEQ_ELEM, \ 301 BOOST_VMD_EMPTY \ 302 ) \ 303 (elem,seq) \ 304 /**/ 305 306 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_CHELM_RES(data,elem) \ 307 ( \ 308 BOOST_PP_SEQ_ELEM(elem,BOOST_PP_TUPLE_ELEM(0,data)), \ 309 BOOST_PP_TUPLE_ELEM(1,data) \ 310 ) \ 311 /**/ 312 313 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_CHELM(data,elem) \ 314 BOOST_PP_IIF \ 315 ( \ 316 BOOST_PP_GREATER(BOOST_PP_SEQ_SIZE(BOOST_PP_TUPLE_ELEM(0,data)),elem), \ 317 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_CHELM_RES, \ 318 BOOST_VMD_DETAIL_EMPTY_RESULT \ 319 ) \ 320 (data,elem) \ 321 /**/ 322 323 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_CHELM_D(d,data,elem) \ 324 BOOST_PP_IIF \ 325 ( \ 326 BOOST_PP_GREATER_D(d,BOOST_PP_SEQ_SIZE(BOOST_PP_TUPLE_ELEM(0,data)),elem), \ 327 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_CHELM_RES, \ 328 BOOST_VMD_DETAIL_EMPTY_RESULT \ 329 ) \ 330 (data,elem) \ 331 /**/ 332 333 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_ONLY(seq,elem) \ 334 BOOST_PP_IIF \ 335 ( \ 336 BOOST_VMD_IS_EMPTY(seq), \ 337 BOOST_VMD_EMPTY, \ 338 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_ONLY_CHELM \ 339 ) \ 340 (seq,elem) \ 341 /**/ 342 343 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_ONLY_D(d,seq,elem) \ 344 BOOST_PP_IIF \ 345 ( \ 346 BOOST_VMD_IS_EMPTY(seq), \ 347 BOOST_VMD_EMPTY, \ 348 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_ONLY_CHELM_D \ 349 ) \ 350 (d,seq,elem) \ 351 /**/ 352 353 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER(data,elem) \ 354 BOOST_PP_IIF \ 355 ( \ 356 BOOST_VMD_IS_EMPTY(BOOST_PP_TUPLE_ELEM(0,data)), \ 357 BOOST_VMD_DETAIL_EMPTY_RESULT, \ 358 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_CHELM \ 359 ) \ 360 (data,elem) \ 361 /**/ 362 363 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_D(d,data,elem) \ 364 BOOST_PP_IIF \ 365 ( \ 366 BOOST_VMD_IS_EMPTY(BOOST_PP_TUPLE_ELEM(0,data)), \ 367 BOOST_VMD_DETAIL_EMPTY_RESULT, \ 368 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_CHELM_D \ 369 ) \ 370 (d,data,elem) \ 371 /**/ 372 373 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ(seq,elem,nm) \ 374 BOOST_PP_IIF \ 375 ( \ 376 BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER(nm), \ 377 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER, \ 378 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_ONLY \ 379 ) \ 380 (seq,elem) \ 381 /**/ 382 383 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_D(d,seq,elem,nm) \ 384 BOOST_PP_IIF \ 385 ( \ 386 BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER_D(d,nm), \ 387 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_AFTER_D, \ 388 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_ONLY_D \ 389 ) \ 390 (d,seq,elem) \ 391 /**/ 392 393 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_VSEQ(...) \ 394 BOOST_PP_VARIADIC_ELEM(0,__VA_ARGS__) \ 395 /**/ 396 397 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PROCESS(elem,vseq,nm) \ 398 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ \ 399 ( \ 400 BOOST_VMD_DETAIL_SEQUENCE_ELEM_PROCESS_TUPLE \ 401 ( \ 402 vseq, \ 403 elem, \ 404 BOOST_VMD_TYPE_SEQ, \ 405 nm \ 406 ), \ 407 elem, \ 408 nm \ 409 ) \ 410 /**/ 411 412 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PROCESS_D(d,elem,vseq,nm) \ 413 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FSEQ_D \ 414 ( \ 415 d, \ 416 BOOST_VMD_DETAIL_SEQUENCE_ELEM_PROCESS_TUPLE_D \ 417 ( \ 418 d, \ 419 vseq, \ 420 elem, \ 421 BOOST_VMD_TYPE_SEQ, \ 422 nm \ 423 ), \ 424 elem, \ 425 nm \ 426 ) \ 427 /**/ 428 429 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_EMPTY(elem,vseq,nm) \ 430 BOOST_PP_EXPR_IIF \ 431 ( \ 432 BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER(nm), \ 433 (,) \ 434 ) \ 435 /**/ 436 437 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_EMPTY_D(d,elem,vseq,nm) \ 438 BOOST_PP_EXPR_IIF \ 439 ( \ 440 BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER_D(d,nm), \ 441 (,) \ 442 ) \ 443 /**/ 444 445 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_CE(elem,vseq,nm) \ 446 BOOST_PP_IIF \ 447 ( \ 448 BOOST_VMD_DETAIL_NOT_EMPTY(vseq), \ 449 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PROCESS, \ 450 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_EMPTY \ 451 ) \ 452 (elem,vseq,nm) \ 453 /**/ 454 455 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_CE_D(d,elem,vseq,nm) \ 456 BOOST_PP_IIF \ 457 ( \ 458 BOOST_VMD_DETAIL_NOT_EMPTY(vseq), \ 459 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PROCESS_D, \ 460 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_EMPTY_D \ 461 ) \ 462 (d,elem,vseq,nm) \ 463 /**/ 464 465 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN_D(d,res,nm,type) \ 466 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN(res,nm,type) \ 467 /**/ 468 469 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN(res,nm,type) \ 470 BOOST_VMD_IDENTITY_RESULT \ 471 ( \ 472 BOOST_PP_IIF \ 473 ( \ 474 BOOST_VMD_DETAIL_MODS_IS_RESULT_ONLY_AFTER(nm), \ 475 BOOST_PP_TUPLE_ELEM, \ 476 BOOST_VMD_IDENTITY(res) \ 477 ) \ 478 (1,res) \ 479 ) \ 480 /**/ 481 482 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_INDEX_JRES(data,index) \ 483 BOOST_PP_IF \ 484 ( \ 485 index, \ 486 (data,BOOST_PP_DEC(index)), \ 487 (,) \ 488 ) \ 489 /**/ 490 491 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_JRES(data,index) \ 492 BOOST_PP_EXPR_IF \ 493 ( \ 494 index, \ 495 data \ 496 ) \ 497 /**/ 498 499 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_MATCH(data,nm,index) \ 500 BOOST_PP_IIF \ 501 ( \ 502 BOOST_VMD_DETAIL_MODS_IS_RESULT_INDEX(nm), \ 503 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_INDEX_JRES, \ 504 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_JRES \ 505 ) \ 506 (data,index) \ 507 /**/ 508 509 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_ID_TUP(data,nm) \ 510 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_MATCH \ 511 ( \ 512 data, \ 513 nm, \ 514 BOOST_VMD_DETAIL_MATCH_IDENTIFIER \ 515 ( \ 516 data, \ 517 BOOST_VMD_DETAIL_MODS_RESULT_OTHER(nm) \ 518 ) \ 519 ) \ 520 /**/ 521 522 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_ID_TUP_D(d,data,nm) \ 523 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_MATCH \ 524 ( \ 525 data, \ 526 nm, \ 527 BOOST_VMD_DETAIL_MATCH_IDENTIFIER_D \ 528 ( \ 529 d, \ 530 data, \ 531 BOOST_VMD_DETAIL_MODS_RESULT_OTHER(nm) \ 532 ) \ 533 ) \ 534 /**/ 535 536 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_ID(data,nm,type) \ 537 BOOST_VMD_IDENTITY_RESULT \ 538 ( \ 539 BOOST_PP_IIF \ 540 ( \ 541 BOOST_VMD_DETAIL_SEQUENCE_ELEM_CHECK_FOR_IDENTIFIERS(nm,type), \ 542 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_ID_TUP, \ 543 BOOST_VMD_IDENTITY(data) \ 544 ) \ 545 (data,nm) \ 546 ) \ 547 /**/ 548 549 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_ID_D(d,data,nm,type) \ 550 BOOST_VMD_IDENTITY_RESULT \ 551 ( \ 552 BOOST_PP_IIF \ 553 ( \ 554 BOOST_VMD_DETAIL_SEQUENCE_ELEM_CHECK_FOR_IDENTIFIERS_D(d,nm,type), \ 555 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_ID_TUP_D, \ 556 BOOST_VMD_IDENTITY(data) \ 557 ) \ 558 (d,data,nm) \ 559 ) \ 560 /**/ 561 562 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY(res,nm,type) \ 563 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_ID \ 564 ( \ 565 BOOST_PP_TUPLE_ELEM(1,res), \ 566 nm, \ 567 type \ 568 ) \ 569 /**/ 570 571 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_D(d,res,nm,type) \ 572 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_ID_D \ 573 ( \ 574 d, \ 575 BOOST_PP_TUPLE_ELEM(1,res), \ 576 nm, \ 577 type \ 578 ) \ 579 /**/ 580 581 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_CHANGE(res,nm,type) \ 582 BOOST_PP_TUPLE_REPLACE \ 583 ( \ 584 res, \ 585 0, \ 586 BOOST_PP_TUPLE_ELEM \ 587 ( \ 588 1, \ 589 BOOST_PP_TUPLE_ELEM(0,res) \ 590 ) \ 591 ) \ 592 /**/ 593 594 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_CHANGE_D(d,res,nm,type) \ 595 BOOST_PP_TUPLE_REPLACE_D \ 596 ( \ 597 d, \ 598 res, \ 599 0, \ 600 BOOST_PP_TUPLE_ELEM \ 601 ( \ 602 1, \ 603 BOOST_PP_TUPLE_ELEM(0,res) \ 604 ) \ 605 ) \ 606 /**/ 607 608 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ONLY_CAFTER(res,nm,type) \ 609 BOOST_PP_IIF \ 610 ( \ 611 BOOST_VMD_DETAIL_MODS_IS_RESULT_ONLY_AFTER(nm), \ 612 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN, \ 613 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_CHANGE \ 614 ) \ 615 (res,nm,type) \ 616 /**/ 617 618 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ONLY_CAFTER_D(d,res,nm,type) \ 619 BOOST_PP_IIF \ 620 ( \ 621 BOOST_VMD_DETAIL_MODS_IS_RESULT_ONLY_AFTER(nm), \ 622 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN_D, \ 623 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_CHANGE_D \ 624 ) \ 625 (d,res,nm,type) \ 626 /**/ 627 628 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_SUCCESS(res,nm,type,index) \ 629 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ONLY_CAFTER \ 630 ( \ 631 BOOST_PP_TUPLE_PUSH_BACK(res,BOOST_PP_DEC(index)), \ 632 nm, \ 633 type \ 634 ) \ 635 /**/ 636 637 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_SUCCESS_D(d,res,nm,type,index) \ 638 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ONLY_CAFTER_D \ 639 ( \ 640 d, \ 641 BOOST_PP_TUPLE_PUSH_BACK(res,BOOST_PP_DEC(index)), \ 642 nm, \ 643 type \ 644 ) \ 645 /**/ 646 647 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_FAILURE(res,nm,type,index) \ 648 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT(nm) \ 649 /**/ 650 651 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_FAILURE_D(d,res,nm,type,index) \ 652 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_D(d,nm) \ 653 /**/ 654 655 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_INDEX_JRES(res,nm,type,index) \ 656 BOOST_PP_IF \ 657 ( \ 658 index, \ 659 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_SUCCESS, \ 660 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_FAILURE \ 661 ) \ 662 (res,nm,type,index) \ 663 /**/ 664 665 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_INDEX_JRES_D(d,res,nm,type,index) \ 666 BOOST_PP_IF \ 667 ( \ 668 index, \ 669 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_SUCCESS_D, \ 670 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_FAILURE_D \ 671 ) \ 672 (d,res,nm,type,index) \ 673 /**/ 674 675 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_JRES_FAILURE(res,nm,type) \ 676 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT(nm) \ 677 /**/ 678 679 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_JRES_FAILURE_D(d,res,nm,type) \ 680 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_D(d,nm) \ 681 /**/ 682 683 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_JRES(res,nm,type,index) \ 684 BOOST_PP_IF \ 685 ( \ 686 index, \ 687 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ONLY_CAFTER, \ 688 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_JRES_FAILURE \ 689 ) \ 690 (res,nm,type) \ 691 /**/ 692 693 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_JRES_D(d,res,nm,type,index) \ 694 BOOST_PP_IF \ 695 ( \ 696 index, \ 697 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ONLY_CAFTER_D, \ 698 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_JRES_FAILURE_D \ 699 ) \ 700 (d,res,nm,type) \ 701 /**/ 702 703 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ID_RES(res,nm,type,index) \ 704 BOOST_PP_IIF \ 705 ( \ 706 BOOST_VMD_DETAIL_MODS_IS_RESULT_INDEX(nm), \ 707 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_INDEX_JRES, \ 708 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_JRES \ 709 ) \ 710 (res,nm,type,index) \ 711 /**/ 712 713 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ID_RES_D(d,res,nm,type,index) \ 714 BOOST_PP_IIF \ 715 ( \ 716 BOOST_VMD_DETAIL_MODS_IS_RESULT_INDEX(nm), \ 717 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_INDEX_JRES_D, \ 718 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_JRES_D \ 719 ) \ 720 (d,res,nm,type,index) \ 721 /**/ 722 723 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ID(res,nm,type) \ 724 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ID_RES \ 725 ( \ 726 res, \ 727 nm, \ 728 type, \ 729 BOOST_VMD_DETAIL_MATCH_IDENTIFIER \ 730 ( \ 731 BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA(res,nm), \ 732 BOOST_VMD_DETAIL_MODS_RESULT_OTHER(nm) \ 733 ) \ 734 ) \ 735 /**/ 736 737 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ID_D(d,res,nm,type) \ 738 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ID_RES_D \ 739 ( \ 740 d, \ 741 res, \ 742 nm, \ 743 type, \ 744 BOOST_VMD_DETAIL_MATCH_IDENTIFIER_D \ 745 ( \ 746 d, \ 747 BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_D(d,res,nm), \ 748 BOOST_VMD_DETAIL_MODS_RESULT_OTHER(nm) \ 749 ) \ 750 ) \ 751 /**/ 752 753 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT(res,nm,type) \ 754 BOOST_PP_IIF \ 755 ( \ 756 BOOST_VMD_DETAIL_SEQUENCE_ELEM_CHECK_FOR_IDENTIFIERS(nm,type), \ 757 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ID, \ 758 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ONLY_CAFTER \ 759 ) \ 760 (res,nm,type) \ 761 /**/ 762 763 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_D(d,res,nm,type) \ 764 BOOST_PP_IIF \ 765 ( \ 766 BOOST_VMD_DETAIL_SEQUENCE_ELEM_CHECK_FOR_IDENTIFIERS_D(d,nm,type), \ 767 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ID_D, \ 768 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_ONLY_CAFTER_D \ 769 ) \ 770 (d,res,nm,type) \ 771 /**/ 772 773 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK(res,nm,type) \ 774 BOOST_PP_IIF \ 775 ( \ 776 BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER(nm), \ 777 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT, \ 778 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY \ 779 ) \ 780 (res,nm,type) \ 781 /**/ 782 783 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_D(d,res,nm,type) \ 784 BOOST_PP_IIF \ 785 ( \ 786 BOOST_VMD_DETAIL_SEQUENCE_STATE_IS_AFTER_D(d,nm), \ 787 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_SPLIT_D, \ 788 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_ONLY_D \ 789 ) \ 790 (d,res,nm,type) \ 791 /**/ 792 793 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_FAILED(res,nm,type) \ 794 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT(nm) \ 795 /**/ 796 797 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_FAILED_D(d,res,nm,type) \ 798 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_D(d,nm) \ 799 /**/ 800 801 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_ID(res,nm,type) \ 802 BOOST_VMD_IS_IDENTIFIER \ 803 ( \ 804 BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA(res,nm) \ 805 ) \ 806 /**/ 807 808 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_ID_D(d,res,nm,type) \ 809 BOOST_VMD_IS_IDENTIFIER_D \ 810 ( \ 811 d, \ 812 BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_DATA_D(d,res,nm) \ 813 ) \ 814 /**/ 815 816 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_OTHER(res,nm,type) \ 817 BOOST_VMD_DETAIL_EQUAL_TYPE \ 818 ( \ 819 BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE(res,nm), \ 820 type \ 821 ) \ 822 /**/ 823 824 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_OTHER_D(d,res,nm,type) \ 825 BOOST_VMD_DETAIL_EQUAL_TYPE_D \ 826 ( \ 827 d, \ 828 BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_RESULT_TYPE_D(d,res,nm), \ 829 type \ 830 ) \ 831 /**/ 832 833 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE(res,nm,type) \ 834 BOOST_PP_IIF \ 835 ( \ 836 BOOST_VMD_DETAIL_EQUAL_TYPE \ 837 ( \ 838 BOOST_VMD_TYPE_IDENTIFIER, \ 839 type \ 840 ), \ 841 BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_ID, \ 842 BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_OTHER \ 843 ) \ 844 (res,nm,type) \ 845 /**/ 846 847 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_D(d,res,nm,type) \ 848 BOOST_PP_IIF \ 849 ( \ 850 BOOST_VMD_DETAIL_EQUAL_TYPE_D \ 851 ( \ 852 d, \ 853 BOOST_VMD_TYPE_IDENTIFIER, \ 854 type \ 855 ), \ 856 BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_ID_D, \ 857 BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_OTHER_D \ 858 ) \ 859 (d,res,nm,type) \ 860 /**/ 861 862 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT(res,nm,type) \ 863 BOOST_PP_IIF \ 864 ( \ 865 BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE(res,nm,type), \ 866 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK, \ 867 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_FAILED \ 868 ) \ 869 (res,nm,type) \ 870 /**/ 871 872 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_D(d,res,nm,type) \ 873 BOOST_PP_IIF \ 874 ( \ 875 BOOST_VMD_DETAIL_SEQUENCE_ELEM_MATCHING_TYPE_D(d,res,nm,type), \ 876 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_CHECK_D, \ 877 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_FAILED_D \ 878 ) \ 879 (d,res,nm,type) \ 880 /**/ 881 882 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_NF(res,nm,type) \ 883 BOOST_PP_IIF \ 884 ( \ 885 BOOST_VMD_IS_EMPTY(type), \ 886 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN, \ 887 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT \ 888 ) \ 889 (res,nm,type) \ 890 /**/ 891 892 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_NF_D(d,res,nm,type) \ 893 BOOST_PP_IIF \ 894 ( \ 895 BOOST_VMD_IS_EMPTY(type), \ 896 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_FIN_D, \ 897 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_PT_D \ 898 ) \ 899 (d,res,nm,type) \ 900 /**/ 901 902 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_FAILED(res,nm,type) \ 903 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT(nm) \ 904 /**/ 905 906 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_FAILED_D(d,res,nm,type) \ 907 BOOST_VMD_DETAIL_SEQUENCE_ELEM_FAILURE_RESULT_D(d,nm) \ 908 /**/ 909 910 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE(res,nm,type) \ 911 BOOST_PP_IIF \ 912 ( \ 913 BOOST_VMD_DETAIL_SEQUENCE_ELEM_HAS_FAILED(res,nm), \ 914 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_FAILED, \ 915 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_NF \ 916 ) \ 917 (res,nm,type) \ 918 /**/ 919 920 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_D(d,res,nm,type) \ 921 BOOST_PP_IIF \ 922 ( \ 923 BOOST_VMD_DETAIL_SEQUENCE_ELEM_HAS_FAILED_D(d,res,nm), \ 924 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_FAILED_D, \ 925 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_NF_D \ 926 ) \ 927 (d,res,nm,type) \ 928 /**/ 929 930 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_COA(res,nm) \ 931 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE \ 932 ( \ 933 res, \ 934 nm, \ 935 BOOST_VMD_DETAIL_MODS_RESULT_TYPE(nm) \ 936 ) \ 937 /**/ 938 939 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_COA_D(d,res,nm) \ 940 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_TYPE_D \ 941 ( \ 942 d, \ 943 res, \ 944 nm, \ 945 BOOST_VMD_DETAIL_MODS_RESULT_TYPE(nm) \ 946 ) \ 947 /**/ 948 949 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM(elem,vseq,nm) \ 950 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_COA \ 951 ( \ 952 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_CE(elem,vseq,nm), \ 953 nm \ 954 ) \ 955 /**/ 956 957 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_D(d,elem,vseq,nm) \ 958 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_COA_D \ 959 ( \ 960 d, \ 961 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_CE_D(d,elem,vseq,nm), \ 962 nm \ 963 ) \ 964 /**/ 965 966 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM(allow,elem,...) \ 967 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM \ 968 ( \ 969 elem, \ 970 BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_VSEQ(__VA_ARGS__), \ 971 BOOST_VMD_DETAIL_NEW_MODS(allow,__VA_ARGS__) \ 972 ) \ 973 /**/ 974 975 #define BOOST_VMD_DETAIL_SEQUENCE_ELEM_D(d,allow,elem,...) \ 976 BOOST_VMD_DETAIL_SEQUENCE_ELEM_NM_D \ 977 ( \ 978 d, \ 979 elem, \ 980 BOOST_VMD_DETAIL_SEQUENCE_ELEM_GET_VSEQ(__VA_ARGS__), \ 981 BOOST_VMD_DETAIL_NEW_MODS_D(d,allow,__VA_ARGS__) \ 982 ) \ 983 /**/ 984 985 #endif /* BOOST_VMD_DETAIL_SEQUENCE_ELEM_HPP */ 986