I did see that some uses in LLVM seem like people are writing
struct MyVec : std::vector<int> {};
simply as a kind of "mangling firewall," where the "natural" thing to write (in the absence of any external constraints) would have been simply:
using MyVec = std::vector<int>;
In the latter case the mangled symbol names would have contained "std::__1::vector<int, std::__1::allocator<int>>"; in the former case they'll simply contain "MyVec", which is (1) shorter, (2) easier to read in the debugger, and (3) more stable in case this is a long-lived shared-library ABI boundary.