A compound property tag describes a combination of possible values of different
properties. The type components<F>, where F
is a callable builtin type, is a compound property tag that describes F.
The tag class template can be used to combine property tags.

tag<non_const,default_cc>// combination of two properties

When several values for the same property are specified in tag's
argument list, only the rightmost one is used; others are ignored.

Default values are selected for properties not specified by the tag in the
context of type synthesis.

// given S = mpl::vector<int,a_class const &>
member_function_pointer<S>::type// is int (a_class::*)() const
// note: the cv-qualification is picked based on the class type,
// a nonvariadic signature and the default calling convention
// are used
member_function_pointer<S,non_const>::type// is int (a_class::*)()
// no const qualification, as explicitly specified by the tag type