std::basic_iosma publicznego konstruktora :
explicit basic_ios (std::basic_streambuf<CharT,Traits>* sb);
IMO, jedynym powodem, dla którego klasa ma konstruktora publicznego, jest użycie autonomicznej instancji tej klasy w programie. Jeśli klasa istnieje tylko po to, aby inne klasy z niej wywodziły się (jak się wydaje basic_ios), wszystkie konstruktory klasy powinny być protected. Wszystkie konstruktory std::ios_basesą chronione. Ale z jakiegoś powodu projektanci standardu basic_iosupublicznili tego konstruktora .
basic_iosjest używany jako klasa podstawowa dla kilku typów strumieni i nie mogę przewidzieć przypadku użycia, w którym miałbyś taki, który nie byłby przynajmniej a basic_istreamlub basic_ostream. Czy jest jeden
basic_iosafaik, biorąc pod uwagę , że ctor biorącybasic_streambuf*był publicznie, zanim było to możliweusing B::B;. Oczekuję, że stare implementacje miały po prostu proxy ctor:A(int x) : B(x) {}- który działa dobrze, nawet jeśliBctor jestprotected.