It is not specified if call to ostream operator<< can fail or throw any exception and I have never encounter this.
struct MyClass {
int data;
// I/O operators with noexcept specifier
friend std::istream& operator>>(std::istream &in, MyClass &obj) noexcept;
friend std::ostream& operator<<(std::ostream &out, const MyClass &obj) noexcept;
};
The reason none of the operator >>
and operator <<
are marked as noexcept
is because of std::basic_ios::exceptions
. This member function is present in all objects that inherit from std::basic_ios
and allows you to configure the stream to throw exceptions for certain failure modes. If the operators were noexcept
then you could not use them with a stream that has exceptions set.