Front Page / Metafunctions / Concepts / Metafunction |
A metafunction is a class or a class template that represents a function invocable at compile-time. An non-nullary metafunction is invoked by instantiating the class template with particular template parameters (metafunction arguments); the result of the metafunction application is accessible through the instantiation's nested type typedef. All metafunction's arguments must be types (i.e. only type template parameters are allowed). A metafunction can have a variable number of parameters. A nullary metafunction is represented as a (template) class with a nested type typename member.
In the following table and subsequent specifications, f is a Metafunction.
Expression | Type | Complexity |
---|---|---|
f::type | Any type | Unspecified. |
f<>::type | Any type | Unspecified. |
f<a1,..,an>::type | Any type | Unspecified. |
typedef f::type x;
Precondition: | f is a nullary Metafunction; f::type is a type-name. |
---|---|
Semantics: | x is the result of the metafunction invocation. |
typedef f<>::type x;
Precondition: | f is a nullary Metafunction; f<>::type is a type-name. |
---|---|
Semantics: | x is the result of the metafunction invocation. |
typedef f<a1,... an>::type x;
Precondition: | f is an n-ary Metafunction; a1,... an are types; f<a1,...an>::type is a type-name. |
---|---|
Semantics: | x is the result of the metafunction invocation with the actual arguments a1,... an. |