X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Utils%2Fmpl.hh;h=761ebf45ebe6850ffa2a04cac0f7e07573b6d52e;hb=ae06fe86f16fdabb7ffb219d255444d2eb4f4f79;hp=ba600835869550878313fec6a1093ddd664a286e;hpb=271789888cd1ae6361607616f9f4e6e460e192c4;p=senf.git diff --git a/Utils/mpl.hh b/Utils/mpl.hh index ba60083..761ebf4 100644 --- a/Utils/mpl.hh +++ b/Utils/mpl.hh @@ -39,6 +39,15 @@ namespace mpl { /** \defgroup senfmpl Low-level template meta programming helpers */ + /** \brief Marker class for empty default values etc. + + This is like Boosts \c boost::mpl::na just an empty class used as template default argument + to mark missing arguments + + \note Don't use this as an empty base class. We may add some informative members to this. + */ + struct nil {}; + /** \brief Return-value type used to implement overload selection The senf::mpl::rv type is used together with \ref SENF_MPL_RV() to select template @@ -182,6 +191,17 @@ namespace mpl { static senf::mpl::rv<0> _SENF_MPL_SLOT_ ## name (_); \ SENF_MPL_SLOT_SET(name,value) + /** \brief Define MPL slot initialized to 0 + + This is like \ref SENF_MPL_SLOT_DEF() but initializes the slot to the fixed value 0. The + advantage over \ref SENF_MPL_SLOT_DEF() is, that this macro may be called from an include + file whereas all the other \\c SENF_MPL_SLOT_ macros must always be called from the relevant + file. + */ +# define SENF_MPL_SLOT_DEF_ZERO(name) \ + template \ + static senf::mpl::rv<0> _SENF_MPL_SLOT_ ## name (_); + /** \brief Set MPL slot \see \ref SENF_MPL_SLOT_DEF() \ingroup senfmpl