std::basic_iostiene un constructor público :
explicit basic_ios (std::basic_streambuf<CharT,Traits>* sb);
En mi opinión, la única razón para que una clase tenga un constructor público es usar una instancia independiente de esa clase en un programa. Si una clase existe solo para que otras clases desciendan de ella (como parece ser el caso basic_ios), todos los constructores de la clase deberían estarlo protected. Los constructores de std::ios_baseestán todos protegidos. Pero, por alguna razón, los diseñadores del estándar hicieron de éste un constructor de basic_iospúblico.
basic_iosse usa como una clase base para varios tipos de flujo, y no puedo imaginar un caso de uso en el que tenga uno que no sea al menos un basic_istreamo basic_ostream. ¿Hay uno?
basic_iostoma de un ctorbasic_streambuf*ha sido pública desde antes de que pudieras hacerlousing B::B;. Espero que las implementaciones antiguas solo tuvieran un ctor proxy:A(int x) : B(x) {}- que funciona bien incluso siBel ctor lo esprotected.