on the idiocy of the bool type.

Its implementation and promotion rules are just dumb.

Repeat after me - there is no bool type, there is no bool type, there is no bool type.

Every idiot C programmer that ever typedef'd a bool (or worse, #defined's TRUE or FALSE) should burn in hell.

0 is false.
!false is true.

Live with it.

As for polymorphism - you can make your own in C with about the same amount of work.