std::basic_iosмає публічний конструктор :
explicit basic_ios (std::basic_streambuf<CharT,Traits>* sb);
IMO, єдиною причиною для класу мати загальнодоступний конструктор - використовувати окремий екземпляр цього класу в програмі. Якщо клас існує лише для того, щоб з нього сходили інші класи (як це здається basic_ios), всі конструктори класу повинні бути protected. Усі конструктори std::ios_baseзахищені. Але чомусь дизайнери стандарту зробили цей конструктор basic_iosзагальнодоступним.
basic_iosвикористовується як базовий клас для декількох типів потоків, і я не можу передбачити випадок використання, коли у вас був би той, який не був принаймні a basic_istreamабо basic_ostream. Чи є такий?
basic_iosctor, який приймає abasic_streambuf*, був публічним з тих пір, як ви могли це зробитиusing B::B;. Я думаю, що у старих реалізаціях просто був проксі-сервер:A(int x) : B(x) {}- який працює добре, навіть якщоBє ctorprotected.