The class std::ios_base::failure
defines an exception object that is thrown on failure by the functions in the Input/Output library.
std::ios_base::failure
may be defined either as a member class of std::ios_base or as a synonym (typedef) for another class with equivalent functionality.
Inheritance diagram
(until C++11)Inheritance diagram
(since C++11) [edit] Member functions constructs a newfailure
object with the given message
failure
object
Constructs the exception object using
messageas explanation string which can later be retrieved using
what().
ec is used to identify the specific reason for the failure.(since C++11) 3)Copy constructor. Initialize the contents with those of
other.
If *this and other both have dynamic typestd::ios_base::failure
then std::strcmp(what(), other.what()) == 0.(since C++11) Parameters message - explanatory string ec - error code to identify the specific reason for the failure other - another failure
to copy Notes
Because copying std::ios_base::failure
is not permitted to throw exceptions, this message is typically stored internally as a separately-allocated reference-counted string. This is also why there is no constructor taking std::string&&: it would have to copy the content anyway.
failure& operator=( const failure& other );
(until C++11)failure& operator=( const failure& other ) noexcept;
(since C++11)Assigns the contents with those of other. If *this and other both have dynamic type std::ios_base::failure
then std::strcmp(what(), other.what()) == 0 after assignment.(since C++11)
*this
std::ios_base::failure::whatvirtual const char* what() const throw();
(until C++11)virtual const char* what() const noexcept;
(since C++11)Returns the explanatory string.
Return valuePointer to an implementation-defined null-terminated string with explanatory information. The string is suitable for conversion and display as a std::wstring. The pointer is guaranteed to be valid at least until the exception object from which it is obtained is destroyed, or until a non-const member function (e.g. copy assignment operator) on the exception object is called.
NotesImplementations are allowed but not required to override what()
.
std::system_error
) [edit] returns an explanatory string
std::system_error
) [edit] Inherited from std::exception Member functions destroys the exception object
std::exception
) [edit] returns an explanatory string
std::exception
) [edit] [edit] Notes
Before the resolution of LWG issue 331, std::ios_base::failure
declared a destructor without throw(), where std::exception::~exception() was declared with throw()[1]. This means the std::ios_base::failure::~failure()
had a weaker exception specification. The resolution is to remove that declaration so that the non-throwing exception specification is kept.
LWG issue 363 targets the same defect and its resolution is to add throw() to the declaration of std::ios_base::failure::~failure()
. That resolution was not applied due to the conflict between the two resolutions.
#include <fstream> #include <iostream> int main() { std::ifstream f("doesn't exist"); try { f.exceptions(f.failbit); } catch (const std::ios_base::failure& e) { std::cout << "Caught an ios_base::failure.\n" << "Explanatory string: " << e.what() << '\n' << "Error code: " << e.code() << '\n'; } }
Possible output:
Caught an ios_base::failure. Explanatory string: ios_base::clear: unspecified iostream_category error Error code: iostream:1[edit] 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 48 C++98 the constructor overload (1) initialized the base class std::exceptionstd::ios_base::failure
declared a destructor without throw() removed the destructor declaration [edit] See also
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4