
Here we go again. The next update. Big thanks go to Rob Stewart and David Abrahams for their helping with this text. There is a version of this passage with markup: http://tinyurl.com/bxvke Can we freeze this part? Regards, Tobias Tag Types ---------- The Function Type library uses tag types to represent one more properties of a type, such as its variadicness or whether the function is decorated with a pointer. Tags that represent the values of a single property are called property tags. These tags can be used to determine whether one property of a type or another tag has a particular value. is_function< T, variadic > is_function< T, pointer > A compound property tag describes a combination of possible values of different properties. The tag class template can be used to create a specific compound property tag. tag<pointer,variadic> // describes a pointer to a variadic function When several tags for the same property appear in the argument list, only the last one is used; others are ignored. tag<pointer,reference> // same as 'reference' The following code creates the type int(*)(int...). function_type<mpl::vector<int,int>, tag<pointer,variadic> >::type All properties not described by the tag acquire a default. The next example creates the type of an undecorated (variadic) function of the default calling convention: int(int...). function_type<mpl::vector<int,int>, variadic >::type A compound property tag matches a type only when all of its component properties match: is_function< void(&)(...) , tag<reference,variadic> >::value // is true is_function< void(X::*)(...), tag<reference,variadic> >::value // is false