I was looking at an example implementation of binder1st, that looks like this:
template <class Operation, class T>
binder1st<Operation> bind1st (const Operation& op, const T& x)
{
return binder1st<Operation>(op, typename Operation::first_argument_type(x));
}
What is the meaning of typename Operation::first_argument_type(x). I understand first_argument_type to be a typename, but belonging to the binary_function base class. It looks to me that it is a function belonging to namespace Operation - in which case, why is typename used here?