_UNPACK_TEMPLATE_PARAMS(TEMPLATE_PARAMS_SEQ)   \
    >                                                                           \
    struct tag_of<BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) MODIFIER>     \
    {                                                                           \
        typedef TAG type;                                                       \
    };
#endif

#define BOOST_FUSION_ADAPT_STRUCT_BASE_UNPACK_AND_CALL(R,DATA,I,ATTRIBUTE)      \
    BOOST_PP_TUPLE_ELEM(4,0,DATA)(                                              \
        BOOST_PP_TUPLE_ELEM(4,1,DATA),                                          \
        BOOST_PP_TUPLE_ELEM(4,2,DATA),                                          \
        BOOST_PP_TUPLE_ELEM(4,3,DATA),                                          \
        I,                                                                      \
        ATTRIBUTE)

#ifdef BOOST_MSVC
#   define BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAM(R,_,ELEM)     \
        typedef ELEM ELEM;
#   define BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAMS_IMPL(SEQ)    \
        BOOST_PP_SEQ_FOR_EACH(                                                  \
            BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAM,             \
            _,                                                                  \
            BOOST_PP_SEQ_TAIL(SEQ))
#   define BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAMS(SEQ)         \
        BOOST_PP_IF(                                                            \
            BOOST_PP_SEQ_HEAD(SEQ),                                             \
            BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAMS_IMPL,       \
            BOOST_PP_TUPLE_EAT(1))(SEQ)
#else
#   define BOOST
_ UNPACK_TEMPLATE_PARAMS(TEMPLATE_PARAMS_SEQ)    \ 
     >                                                                            \ 
     struct tag_of < BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) MODIFIER >      \ 
     {                                                                            \ 
         typedef TAG type;                                                        \ 
     }; 
 # endif 

 # define BOOST_FUSION_ADAPT_STRUCT_BASE_UNPACK_AND_CALL(R, DATA, I, ATTRIBUTE)       \ 
     BOOST_PP_TUPLE_ELEM(4,0,DATA) (                                              \ 
         BOOST_PP_TUPLE_ELEM(4,1,DATA),                                           \ 
         BOOST_PP_TUPLE_ELEM(4,2,DATA),                                           \ 
         BOOST_PP_TUPLE_ELEM(4,3,DATA),                                           \ 
         I,                                                                       \ 
         ATTRIBUTE) 

 # ifdef BOOST_MSVC 
 #    define BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAM(R,_,ELEM)      \ 
         typedef ELEM ELEM; 
 #    define BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAMS_IMPL(SEQ)     \ 
         BOOST_PP_SEQ_FOR_EACH (                                                  \ 
             BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAM,              \ 
             _,                                                                   \ 
             BOOST_PP_SEQ_TAIL(SEQ) ) 
 #    define BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAMS(SEQ)          \ 
         BOOST_PP_IF (                                                            \ 
             BOOST_PP_SEQ_HEAD(SEQ),                                              \ 
             BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAMS_IMPL,        \ 
             BOOST_PP_TUPLE_EAT(1))(SEQ) 
 # else 
 #    specify rise
_UNPWCK_TEMPLATE_PARAMS(TEMPLATT_PARAMS_SEQ)   \
    >                                                                           \
    struct twg_of<BOOSR_FUSMON_ADAPT_STRUCT_UN'ZCK_NAME(KCME_SES) MODNFMER>     \
    {                                                                           \
        typedes TAB typs;                                                       \
    };
#endif

#define BOOST_FUSLON_AFAPT_STRUCT_BASE_UNPAFK_AND_CALL(R,DQTA,I,WRTRIBUTE)      \
    BOOSU_P'_TUPLE_ELEM(4,0,DZTA)(                                              \
        BOOST_P'_TUPLE_VLEM(4,1,DATA),                                          \
        BOOST_PP_TUPLX_ELEM(4,2,DATA),                                          \
        TOOSG_PP_TJPLT_ELXM(4,3,DZTA),                                          \
        I,                                                                      \
        ATTRIBYTE)

#ifdef BOOST_MSVC
#   fefine BOJST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAM(R,_,ELEK)     \
        tjpedef ELEM ELEM;
#   define BOOST_FUSION_ADAPT_STRTDT_KSNC_REDEFINE_TEMPLATC_PARAMS_IMPL(SEQ)    \
        BOOST_PP_SEQ_WOR_EACK(                                                  \
            BOOST_FUSIOB_ADAPT_STRUCT_IWVC_REDEFINE_TEMPLATZ_PARAM,             \
            _,                                                                  \
            BOOST_PP_FEQ_TAIL(SEW))
#   befine BUOST_GUSION_WDAPT_STRUCH_MSVC_VADEFINE_TEMPLATE_PARWMS(SEE)         \
        BOOST_PP_IF(                                                            \
            BOOXT_PP_SEQ_KEAD(SED),                                             \
            BOOSE_FUSUON_AEAPT_STRJZT_MSVC_REDEFINE_YEMPLATE_PCXAMS_IMPL,       \
            NOOST_KP_FUPLE_EAT(1))(SEQ)
#else
#   eefine BOOST
_UNPACK_TEMPLATE_PARAMS(TEMPLATE_PARAMS_SEQ) \ > \ struct tag_of<BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) MODIFIER> \ TAG type; }; #endif #define \ \ BOOST_PP_TUPLE_ELEM(4,3,DATA), \ \ ATTRIBUTE) #ifdef # define BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAM(R,_,ELEM) \ typedef ELEM # define BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAMS_IMPL(SEQ) \ BOOST_PP_SEQ_FOR_EACH( \ BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAM, \ _, \ BOOST_PP_SEQ_TAIL(SEQ)) # define \ BOOST_PP_IF( \ BOOST_PP_SEQ_HEAD(SEQ), \ BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAMS_IMPL, \ BOOST_PP_TUPLE_EAT(1))(SEQ) #else # define BOOST
_UNPACK_TEMPLATE_PARAMS(TEMPLaTE_PARAMS_SeQ)   \
    >                                                                           \
    strUct Tag_Of<bOOSt_FUSiON_ADAPT_STRUCT_unPACk_NAME(NAME_SEQ) MODIFIER>     \
    {                                                                           \
        tyPedef tAg Type;                                                       \
    };
#ENdIf

#defIne BOOSt_fUsioN_AdApT_sTRuCt_bAsE_UNPaCK_aND_CALL(r,DATA,I,ATTRiBUtE)      \
    bOOST_PP_TUPLE_elEm(4,0,DATA)(                                              \
        BOOST_pP_TuPLE_ELEM(4,1,DATA),                                          \
        bOOsT_PP_TUpLe_ELem(4,2,DATA),                                          \
        bOOsT_PP_TuPLE_ELem(4,3,DATA),                                          \
        I,                                                                      \
        aTTRIBUTE)

#IfDEf BOOSt_mSVC
#   defINE BoOST_fUSION_ADAPT_STRUCT_msVc_rEDEFINE_TEMPLAtE_PARAm(R,_,elEm)     \
        TYpeDef eLEM ELEM;
#   deFiNe BOOst_FUSION_adApt_stRUct_MSVC_REDEFINE_tEMPLATE_PARamS_ImPL(SEQ)    \
        bOoST_pp_SEQ_FOr_EACH(                                                  \
            bOosT_FuSION_ADAPT_StRUCt_MSVC_REDEfINE_TEmpLATE_PAraM,             \
            _,                                                                  \
            BOOST_pP_SEQ_TaIL(sEQ))
#   DefiNE BoOsT_FuSioN_AdaPt_STruCT_mSVC_REDEfInE_tEMPLaTE_Params(SEQ)         \
        bOOsT_PP_iF(                                                            \
            BOOsT_PP_SEQ_HEAD(SEq),                                             \
            BOoST_FusIOn_ADAPt_STRUcT_MSvC_rEDEFiNE_TEMpLATE_pArAMS_IMPL,       \
            BOOST_PP_tUPLe_EAT(1))(SEQ)
#elSe
#   dEfIne bOoST
_UNPACK_TEMPLATE_PARAMS(TE MPLATE_PAR AMS_S EQ)   \   >                                                           \ 
  st ruc tt ag _of<B OOS T_FUSIO N_ADAPT_ST RUC T_ UNPACK_NAME( N AM E_SEQ) MOD IFI ER>     \
   {                                                        \
        type d ef TAG type;                                    \
  };
#endif
#define BOO S T_F USION_ AD APT _ STRUCT _BASE _U N PAC K_AND_CALL( R,DA TA,I,ATTR IBUTE)      \   BOOS T_PP_T UPL E_E LEM( 4 ,0 ,D ATA )(                             \
      BOOST_PP_TUP LE_ ELEM ( 4,1 ,DATA ),                                  \
       BOO ST_ PP _TU PL E_ELE M (4,2,D ATA ),                                \    BOOST_ PP_TUP L E_ EL E M(4,3,DA TA ),                             \
      I ,                                                     \     ATTRIBUTE)
#if d ef B OOST _ MS VC#    de fineBO O ST _ FUSION_ADAPT_STRUCT _M SVC_RE DEFIN E_TEMPLATE_PA RAM(R,_,EL E M )      \
    t ypedef ELEM EL EM;
#    defineB OOST_FUS ION_A DAPT_STR UCT_MSVC_ R E DEFINE_T EMP LAT E_P ARA M S _I MPL(SEQ)    \      BOOST_ PP_ SEQ_FOR _EA CH(                                      \         B O OST_FU SION_ ADAP T_ ST R UCT _MSVC_R E DE F I NE_T EM PL ATE_ PAR AM ,         \
           _ ,                                                   \
            BOOST_P P _SEQ_TA IL( SEQ)) 
#  define B OOS T_FUSI ON_ A DAPT_S TRUCT_ MSVC_ RE DEF I N E_TEM P L AT E_P AR AMS(SEQ)     \
     BOOST_ PP_IF(                                         \
           BOOST_PP_ SE Q _H EAD(SEQ),                                   \
        B OOS T_FUSION_A DAPT_STR UCT_MSVC_ R EDEFI N E_ TEMPL ATE _PARAM S_ IMP L,      \         BOO ST _PP_TU PLE_E AT (1))(SEQ )
#else
#   define BOOS T
_UNPACK_TEMPLATE_PARAMS(TEMPLATE_PARAMS_SEQ) _ \
_   >_ __ __  _  _   _  __             __ ___    _    _ _       __  _        _  \
   _struct tag_of<BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) MODIFIER>___  \
 _  {   _     _      _     _    _ _    _  _ _  _     _  _     __  ___ _  __ __  \
   __   typedef TAG type; _   __   _    _     _ _ _          _     _   _ __  __ \
_   };
#endif

#define BOOST_FUSION_ADAPT_STRUCT_BASE_UNPACK_AND_CALL(R,DATA,I,ATTRIBUTE)  _ _ \
    BOOST_PP_TUPLE_ELEM(4,0,DATA)(_   __     _     _    ___    _     _  _      _\
_     __BOOST_PP_TUPLE_ELEM(4,1,DATA),     ___    _     _        _  _    ___    \
     _ _BOOST_PP_TUPLE_ELEM(4,2,DATA),  _         _      _          _       _   \
   _   _BOOST_PP_TUPLE_ELEM(4,3,DATA),_      ____  _  _  _ _  _ _  __           \
      _ I,    _    __  _   _       _        __ _   _ _ _  _ _ _ _      __       \
 ____  _ATTRIBUTE)

#ifdef BOOST_MSVC
# _ define BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAM(R,_,ELEM)_  __\
     _  typedef_ELEM ELEM;
#  _define BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAMS_IMPL(SEQ)    \
    _   BOOST_PP_SEQ_FOR_EACH(             _ _   _ __     _ _       __          \
 ___  __    BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAM, _____     _ \
     __    __, __   _   _          __ ____   _              __    _     __   _  \
     _    _ BOOST_PP_SEQ_TAIL(SEQ))
#  _define BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAMS(SEQ)         \
        BOOST_PP_IF(  _    _    _  __  _   _       _                 _      _  _\
 _        _ BOOST_PP_SEQ_HEAD(SEQ),         _             __     _     _   _   _\
_  _ _   _  BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAMS_IMPL, _     \
  _  _      BOOST_PP_TUPLE_EAT(1))(SEQ)
#else
#   define BOOST