> The return type of comparison operators is entirely irrelevant
It is entirely relevant. The boolean type of the language is whatever is the type of (0 < 1).
> Typedefs have their own namespace anyway
Typedefs positively do not have their own namespace.
If you write
#undef getc
{
typedef char getc;
}
you cannot call the getc function in that scope; it is now the typedef.