std::basic_iosmemiliki konstruktor publik :
explicit basic_ios (std::basic_streambuf<CharT,Traits>* sb);
IMO, satu-satunya alasan bagi kelas untuk memiliki konstruktor publik adalah untuk menggunakan contoh mandiri dari kelas itu dalam suatu program. Jika suatu kelas ada hanya untuk memiliki kelas lain turun dari itu (seperti yang tampaknya terjadi basic_ios), semua konstruktor kelas harus protected. Konstruktor std::ios_basesemua dilindungi. Tetapi, untuk beberapa alasan, para perancang standar menjadikannya sebagai konstruktor basic_iospublik.
basic_iosdigunakan sebagai kelas dasar untuk beberapa jenis aliran, dan saya tidak bisa membayangkan kasus penggunaan di mana Anda akan memiliki satu yang setidaknya basic_istreamatau tidak basic_ostream. Apakah ada satu?
basic_iosaktor yang mengambilbasic_streambuf*telah publik sejak sebelum Anda bisa melakukannyausing B::B;. Saya berharap bahwa implementasi lama hanya memiliki ctor proxy:A(int x) : B(x) {}- yang berfungsi dengan baik bahkan jikaBctor adalahprotected.