std::basic_ios
имеет открытый конструктор :
explicit basic_ios (std::basic_streambuf<CharT,Traits>* sb);
IMO, единственная причина, по которой у класса есть открытый конструктор, - это использование автономного экземпляра этого класса в программе. Если класс существует только для того, чтобы другие классы происходили от него (как, кажется, имеет место basic_ios
), все конструкторы класса должны быть protected
. Все конструкторы std::ios_base
защищены. Но, по какой-то причине, разработчики стандарта сделали этот конструктор basic_ios
публичным.
basic_ios
используется в качестве базового класса для нескольких типов потоков, и я не могу представить вариант использования, в котором у вас был бы класс, который по крайней мере не был бы basic_istream
или basic_ostream
. Есть один?
basic_ios
ctor take abasic_streambuf*
был публичным еще до того, как вы смогли это сделатьusing B::B;
. Я ожидаю, что в старых реализациях был прокси-ctor:A(int x) : B(x) {}
- который работает нормально, даже еслиB
ctor естьprotected
.