std::basic_iostem um construtor público :
explicit basic_ios (std::basic_streambuf<CharT,Traits>* sb);
Na IMO, a única razão para uma classe ter um construtor público é usar uma instância autônoma dessa classe em um programa. Se uma classe existe apenas para ter outras classes dela (como parece ser o caso basic_ios), todos os construtores da classe devem ser protected. Os construtores de std::ios_baseestão todos protegidos. Mas, por alguma razão, os projetistas do padrão tornaram esse construtor basic_iospúblico.
basic_iosé usado como uma classe base para vários tipos de fluxo e não posso imaginar um caso de uso em que você teria um que não fosse pelo menos um basic_istreamou basic_ostream. Existe um?
basic_iosctor que toma umabasic_streambuf*conta é público desde antes de você poder fazerusing B::B;. Eu espero que implementações antigas tenham apenas um proxy ctor:A(int x) : B(x) {}- que funcione bem mesmo seBo ctor estiverprotected.