std::ios_base:: ios_base

From cppreference.com
(1)
private :
ios_base ( const ios_base & ) ;
(until C++11)
public :
ios_base ( const ios_base & ) = delete ;
(since C++11)
protected :
ios_base ( ) ;
(2)
1) The copy constructor is private (until C++11) deleted (since C++11) : streams are not copyable.
2) The default constructor is protected: only derived classes may construct std::ios_base . The internal state is undefined after the construction. The derived class must call std::basic_ios::init() to complete initialization before first use or before destructor; otherwise the behavior is undefined.

Notes

The same applies to the constructors of the next class in the I/O hierarchy, std::basic_ios . Further-derived classes ( std::istream and std::ostream ) are always constructed with a concrete stream buffer object and call std::basic_ios::init() , possibly more than once, to complete initialization of their virtual base.

Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR Applied to Behavior as published Correct behavior
LWG 50 C++98 the copy constructor was not specified specified as private
LWG 220 C++98 the behavior of destroying a std::ios_base
object before calling its init() was not clear
the behavior is
undefined in this case
LWG 1249 C++98 initialization did not need to be completed before first use also needs to be completed