std::basic_iosa un constructeur public :
explicit basic_ios (std::basic_streambuf<CharT,Traits>* sb);
OMI, la seule raison pour laquelle une classe a un constructeur public est d'utiliser une instance autonome de cette classe dans un programme. Si une classe existe uniquement pour que d'autres classes en descendent (comme cela semble être le cas pour basic_ios), tous les constructeurs de la classe devraient l'être protected. Les constructeurs de std::ios_basesont tous protégés. Mais, pour une raison quelconque, les concepteurs de la norme ont fait de ce constructeur un basic_iospublic.
basic_iosest utilisé comme classe de base pour plusieurs types de flux, et je ne peux pas imaginer un cas d'utilisation où vous en auriez un qui n'était pas au moins un basic_istreamou basic_ostream. Est-ce qu'il y a un?
basic_iosctor prenant unbasic_streambuf*a été public depuis avant que vous ne puissiez le faireusing B::B;. Je m'attends à ce que les anciennes implémentations aient juste un proxy ctor:A(int x) : B(x) {}- qui fonctionne bien même siBctor l'estprotected.