All other function object concepts defined by the STL are refinements of these three.
Function objects that return bool are an important special case.
A Unary Function whose return type is bool is called a Predicate , and a Binary Function whose return type is bool is called a Binary Predicate . There is an important distinction, but a somewhat subtle one, between function objects and adaptable function objects . Similarly, there need be no way for a program to determine what those restrictions are. An adaptable function object, however, does specify what the argument and return types are, and provides nested typedef s so that those types can be named and used in programs. It is possible to perform very sophisticated operations without actually writing a new function object, simply by combining predefined function objects and function object adaptors.