Often if you write complex software in C++ and using one compiler it will not even compile on another C++ compiler without modifications, and that have also been true with older compiler versions versus newer. Thus you can't expect code from 10-20 years ago to compile without problem on a modern version.
It probably would if they'd followed the standard back when they wrote it.
The problem is that a lot of people made assumptions, eg. that iterators of std::vector were raw pointers and thus it was OK to assign values to them (eg. null). It may have worked on a particular compiler back in the day but it was never correct C++ code.
(I use that example because I've seen it and dealt with it in real life)
Yes, I know the C++ standard is larger than the C standard, but IMHO the most useful subset of C++ is about the same size.
Bjarne S. always said that "Inside C++ there's a smaller, cleaner language trying to get out".
I know projects that have been abandoned simply because the code was to old and it would be to much work to port it to a modern C++ compiler and libraries.
Sure, but the claim was "Something you write today..."
With C you pretty much know what you get down to the machine code level and you can be pretty certain it will compile the same way in the future so it's easier to maintain.
My feelings are that C++ has settled down to the point where it's moot for new development.
(at least a decade ago, and certainly with C++ 0x11)