Why C++ string class is useless?
Because I often work with Qt, I'm comparing it with QString, which is much more than a vector of chars. https://doc.qt.io/qt-5/qstring.html
I used std::string and QString extensively for 4-5 years and find QString inexplicably bloated and un-intuitive for my use cases.
And QString had no magic to it other than wrapping its underlying data in ytf-16 which std::u16string does too.
It's not perfect but it gets the job done, IIRC.