That's an entertaining document but it mostly describes:
1) Hazards in C++ that are also present in C, so you don't escape from them by choosing C over C++. 2) Hazards of complicated C++ features that aren't used that frequently and that programmers can decide not to use in a given project 3) Deficiencies in "old" (C++98) C++ that have been fixed in "modern" (C++11 and later) C++. C++11 was really a big improvement over earlier versions and I didn't get much interested in C++ til it came out.I've written tons of C and a (so far) smallish amount of "modern" C++ and would consider both of them to be scary, but overall my current impression is that C++ is safer if you know take #2 above into account.
For example, in C++ it's, idiomatic to say array.at(i) instead of array[i], and the .at() method on STL arrays checks that the subscript is in range (measurements I've done in my own programs have so far encountered almost no performance loss from this). In C, most people end up using unchecked subscripts. C++ RAII avoids a lot of dangling- resource bugs, etc. None of this has anything to do with C# though.
I've fooled with Ada a little bit and would consider it to be much safer than either C or C++ while being somewhere between the two of them in expressiveness, though much worse in terms of tooling. I can't possibly be saying "my language is better" in naming Ada, since my languages are C and C++, and I've only looked into Ada as a possible alternative to them.
That C# allows escaping to unsafe operations doesn't seem worse to me than Java having a JNI. Even Haskell supports unsafe operations. Of course C# has other issues that make it not sound good for real time.
Here are Bjarne Stroustrup's currently recommended C++ core guidelines which spell out a much safer set of practices than I usually see in C programs: