[pascal]procedure GetRawData(const F: Single): Integer; inline;
var
I: Integer absolute F;
begin
// returns binary representation of a float in an integer
Result := I;
end;[/pascal]
absolute keyword, I am not aware of an equivalent in C....aliasing one variable over another is considered hacky, but sometimes it has its uses

also you forgot about the best, built-in support for strings and dynamic arrays with reference counting....something C(++) can only dream of (it is possible by using smart pointers in C++ but it's ugly and not used)...next extremely fast compilers compared to C++ ones (C ones can be quite fast because it's actually a lot cleaner than the monster C++ is)...then support for method pointers (function(Args): ResultType of object) which is also missing in C(++)....sets, subrange types (already mentioned), interfaces (those can be simulated with abstract base classes combined with multiple inheritance in C++)....and I guess one may find even more things which are better in Object Pascal than in C(++)....

sometimes I wish OP would allow some equivalent for C's bitfields in structures with automatic shifting/masking to get the correct results on set/get possibly enhanced by OP's range checks....that would be cool
class allocation on the stack is also a nice feature, on the other and it makes C++ classes just a bit more than structs and forces you to use pointers everywhere (explicitly) while in OP class instances are implicitly pointers and save you a lot of headaches.....

all in all I'd say OP has more features which C(++) does not than C(++) has and OP doesn't have...that combined with a much less confusing syntax and easily readable code makes it a perfect choice for development....