Cargo is great, but C++ also has conan and vcpkg, eventually a standard one will emerge.
http://www.klabbers.nl/c/dependency-management-for-c/
Also I do have an issue with Cargo's lack of support for binary libraries.
ADTs, while not as good as in ML languages, at least there is std::variant.
I kind of mentioned explicit unsafe when I refereed to the safety enforced at language level instead of conventions and sanitizers.
Pattern matching is a great feature across all ML based languages, there were already some attempts to add it to the C++ as well.
http://open-std.org/JTC1/SC22/WG21/docs/papers/2016/p0095r1....
One of the things Rust should focus on as productivity improvement is making that migration as easy as possible.
Right now I cannot justify from business perspective replacing C++ with Rust on the workflows we still use C++ for.
But it doesn't mean that C++ as good as Rust. It's just wrong.
The whole eco-system and community around a language is what defines it.
To give a more explicit example, until it reaches parity with C++ on .NET/UWP tooling, it just means less productivity in spite of being a technically better and safer language.