std::basic_iosha 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_basesono tutti protetti. Ma, per qualche motivo, i progettisti dello standard hanno reso pubblico questo unico costruttore basic_ios.
basic_iosviene 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_istreamo basic_ostream. Ce n'è uno?
basic_iosctor 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 seBctor lo èprotected.