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_iosctor take abasic_streambuf*был публичным еще до того, как вы смогли это сделатьusing B::B;. Я ожидаю, что в старых реализациях был прокси-ctor:A(int x) : B(x) {}- который работает нормально, даже еслиBctor естьprotected.