.. Metafunctions/Concepts//Metafunction Class |20 Metafunction Class ================== Summary ------- A *metafunction class* is a certain form of metafunction representation that enables higher-order metaprogramming. More precisely, it's a class with a publicly-accessible nested |metafunction| called ``apply``. Correspondingly, a metafunction class invocation is defined as invocation of its nested ``apply`` metafunction. Expression requirements ----------------------- |In the following table...| ``f`` is a |Metafunction Class|. +-------------------------------+---------------------------+---------------------------+ | Expression | Type | Complexity | +===============================+===========================+===========================+ | ``f::apply::type`` | Any type | Unspecified. | +-------------------------------+---------------------------+---------------------------+ | ``f::apply<>::type`` | Any type | Unspecified. | +-------------------------------+---------------------------+---------------------------+ | ``f::apply::type`` | Any type | Unspecified. | +-------------------------------+---------------------------+---------------------------+ Expression semantics -------------------- .. parsed-literal:: typedef f::apply::type x; :Precondition: ``f`` is a nullary |Metafunction Class|; ``f::apply::type`` is a *type-name*. :Semantics: ``x`` is the result of the metafunction class invocation. .. ................................................................................... .. parsed-literal:: typedef f::apply<>::type x; :Precondition: ``f`` is a nullary |Metafunction Class|; ``f::apply<>::type`` is a *type-name*. :Semantics: ``x`` is the result of the metafunction class invocation. .. ................................................................................... .. parsed-literal:: typedef f::apply::type x; :Precondition: ``f`` is an *n*-ary metafunction class; ``apply`` is a |Metafunction|. :Semantics: ``x`` is the result of the metafunction class invocation with the actual arguments |a1...an|. Models ------ * |always| * |arg| * |quote| * |numeric_cast| * |unpack_args| See also -------- |Metafunctions|, |Metafunction|, |Lambda Expression|, |Invocation|, |apply_wrap|, |bind|, |quote|