It also most definitely does not include anything even close to weak_ptr.
Are you sure? When reading it through, it looked like ptr<T> was designed to NULL out when the original data was invalid. That is the functionality from std::weak_ptr<T> that would be very nice.
No. This doesn't solve anywhere near enough real problems compared to just using modern C++.
C++ can't solve this issue because it itself is based upon potentially dangerous C libraries. As a library consumer, C++ (even Java and C#) seem better than C but remembering that underneath all their hoods, the same dangers can (and almost certainly do) still lurk, it removes all the fun ;). Plus these languages end up running more C than a C program due to their additional layers written in C so they are still not ideal.
Checked C aims to remove these issues at a much lower level than possible by just bolting on another random language.