std::basic_ios
tiene 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_base
están todos protegidos. Pero, por alguna razón, los diseñadores del estándar hicieron de éste un constructor de basic_ios
público.
basic_ios
se 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_istream
o basic_ostream
. ¿Hay uno?
basic_ios
toma 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 siB
el ctor lo esprotected
.