Finally, we have everything we need to write a complete, formal description of metafunctions.
A metafunction is either
a class template, all of whose parameters are types
or
a class
with a publicly accessible nested result type called type.