### 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.

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. |

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. |

typedef f::apply<a1,*...*a*n*>::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`. |