Answer: A type predicate takes one or more arguments and it is a template. If a type predicate is true it is publicly derived directly or indirectly from true type def. In case it is false it is publicly derived from false type def.
A type predicate takes one or more arguments and it is a template. If a type predicate is true it is publicly derived directly or indirectly from true type def. In case it is false it is publicly derived from false type def. Source: CoolInterview.com
actually this is to give a new name to predefined data types,it is somewhat used so that no one can easily read or understand code:
int _tmain()
{ typedef int hassan; hassan i = 0; cout << typeid(i).name();