std::basic_ios
tem 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_base
estão todos protegidos. Mas, por alguma razão, os projetistas do padrão tornaram esse construtor basic_ios
pú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_istream
ou basic_ostream
. Existe um?
basic_ios
ctor 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 seB
o ctor estiverprotected
.