Why is it impossible in Rust? Do you have any source for that?
It was decided explicitly against for the standard library, because not every optimization is universally good, and keeping String as a thin wrapper over Vec<T> is a good default.
You can tear apart these types and reassemble them very easily. For many C++ std types, you cannot do this.
Here's a discussion about it from a few years back, with some links to the primary discussions: https://news.ycombinator.com/item?id=18372332