I found this enlightening.
As someone who is not a fan of C++, it was interesting to see how the heck C++ ended up the way it is.
I was aware that prior to C++, Stroustrup created a predecessor called C With Classes. But what I was surprised to learn was that this language did not have virtual functions... making me seriously wonder what the heck the point was. Just to be able to write object.function() instead of function(object) ?
At each step, the decisions made seem pretty reasonable. And yet (IMO), the end result is a mess. I think the constraints on the design (particularly the need for source compatibility with C; also the lack of garbage collection, though that was necessary) were just too much.
Sadly, I don't think there's any real alternative to C++, even today, in its area. A language that lets you be close to the hardware while still giving you some abstractions. Maybe Objective C for some people. Although fewer programs need to be close to the hardware, and that's good.
It's also crazy to realize there was a time when a new general purpose language could ship without even fundamental features like, say, a collections library, and still go on to be so widely used.