Ну эта статья показывает как делать действительно не надо и я не помню, чтобы видел такое на практике. То что я встречаю в основном выглядит так:
template <class T, class A>
class MyVector : public std::vector<T, A> {
public:
using std::vector::vector;
void clamp(size_type n) {
if (n < size())
resize(n);
}
};
То есть используется для добавления методов и конструкторов при сохранении исходного интерфейса. При этом не добавляются никакие новые инварианты.