It may be that "untyped references (a.k.a. void *s) are one of the hallmarks of why C and C++ suck", but Win32 programming is most of what ObjectPascal is used for, and you can't do Win32 programming without them. Really, they're everywhere, especially in anything involving a window. It's all about casting unsigned 32-bit ints to arbitrary pointer types. You can hide that stuff from the user (of the language, I mean), but the problem with that is that two of the greatest strengths of Delphi are (1) that you can get directly to the Win32 API, and (2) the VCL is written in ObjectPascal (and therefore extensible in the language you use it with; cf. Visual Basic), which couldn't have been done without (1).

That having been said, one of nicest things about C++ is that unless you have to interact with a primeval C API (e.g. Win32) unsafe typecasts can be avoided almost completely.

Unsafe typecasts are loathsome and ugly, but if you're willing to be paranoid and careful, you can live with them and even prosper. It's just nothing i ever choose to do if I can reasonably avoid it.

The bottom line is that there's no such thing as a "data type"; it's all just bytes in a row, zeroes and ones, and sometimes you have to face that fact if you want to get anything done.

As for ObjectPascal in general, it's a good language, but after learning C++ I'd just as soon not go back. Pascal in general just feels sort of stiff and inexpressive after writing a lot of C. YMMV, de gustibus non disputandem est, etc. . . .