While having a good intention behind it, the idea is actually just a fix for a defficient language, namely C and C++. If
typedef were not a mere type alias, but a true new type, this convention would be (almost) unneccessary as the compiler could catch all errors. For example:
typedef int Temperature;
typedef int Volume;
int f(Temperature a, Volume b)
Although it is meaningless to add temperature and volume quantities, this is perfectly legal C and C++ code, because
Volume are mere
C++ templates have strict compile-time type-checking, but the syntax is unfortunately just horrendous.