And a Rust compiler won't stop you assigning values to the wrong variable. So what? No language is going to completely absolve you of the need to get things right. Both C++ and Rust are capable of expressing unsafe code, but it's clear in the source if you do and it is not the default for anyone competent in either language.
When you say "disciplined use" you make it sound like it is hard. It isn't. You use smart pointers to hold resources. If you see a dumb pointer holding a resource, you know it is a bug.