Re: I've taken out union and some other things that I rarely use
Spoken like a true nsBDFL.
Had to look that up.
Most languages, at least among the algol descendants, have some sort of variant record type which C's union is the minimal version (no required tag.)
Anonymous unions are scattered amongst the socket header files to represent the variety of socket types but arguably this is to implement the socket ABI with some type safety but without function overloading.
Variant records are the data counterpart of the code case (switch) statement in the same way arrays (vectors) are to for statements. (Enumerated types and subrange types for the tags and array indices also feature.) Completely safe if the record's tag is used in the case selection and the correpondence between the tag and the variant is enforced by the compiler.
Another "safe C" compiler that surfaced yonks ago, Cyclone had similar aims but never seem to go anywhere.
I am curious to learn how TrapC handles error conditions like bounds errors - the name hints at some exception (~trap) system.
The example of zeroing an out-of-bounds pointer isn't exactly the best error indication mechanism.
Likewise not writing beyond the end of a buffer and blithely continuing on, could have quite serious ramifications were the truncated contents of the buffer to be used in a critical or sensitive context.
What is unexpectedly missing can be far more dangerous than that which is unexpectedly present. (Think the pin of a hand grenade. ;)