std::basic_ios
ha un costruttore pubblico :
explicit basic_ios (std::basic_streambuf<CharT,Traits>* sb);
IMO, l'unica ragione per cui una classe ha un costruttore pubblico è usare un'istanza autonoma di quella classe in un programma. Se una classe esiste solo per far discendere altre classi da essa (come sembra essere il caso basic_ios
), dovrebbero essere tutti i costruttori della classe protected
. I costruttori di std::ios_base
sono tutti protetti. Ma, per qualche motivo, i progettisti dello standard hanno reso pubblico questo unico costruttore basic_ios
.
basic_ios
viene utilizzato come classe di base per diversi tipi di stream e non riesco a immaginare un caso d'uso in cui ne avresti avuto uno che non fosse almeno un basic_istream
o basic_ostream
. Ce n'è uno?
basic_ios
ctor che prende unbasic_streambuf*
è stato pubblico da prima che tu potessi farlousing B::B;
. Mi aspetto che le vecchie implementazioni abbiano appena avuto un proxy ctor:A(int x) : B(x) {}
- che funziona benissimo anche seB
ctor lo èprotected
.