- std::string_view
- std::span
- std::unique_ptr
- std::shared_ptr
- std::weak_ptr (non owning reference to shared_ptr, knows when the parent is free'd)
- ranges
- move semantics
- move capture in lambdas
- std::variant
- std::optional
To be honest, learning rust has made me a better c++ programmer as well. Having to really think about lifetimes and ownership from an API perspective has been really neat. It's not so much that I wasn't concerned about it before, more that I strive to be more expressive of these conditions in code.