This is the bind2nd definition:
template <class Operation, class T>
binder2nd<Operation> bind2nd (const Operation& op, const T& x)
{
return binder2nd<Operation>(op, typename Operation::second_argument_type(x));
}
And the key word typename can be used to:
In a template declaration, typename can be used as an alternative to class to declare type template parameters.
Inside a declaration or a definition of a template, typename can be used to declare that a dependent name is a type.
So, I think typename is used to declare that Operation::second_argument_type is a type, but I want to know why we need to use typename here ?Can't we use it ? What is the advantage to use it ?