|
|
Defined in header <exception> | ||
class nested_exception; | (since C++11) | |
std::nested_exception
is a polymorphic mixin class which can capture and store the current exception, making it possible to nest exceptions of arbitrary types within each other.
All member functions of | (since C++26) |
Contents |
constructs a nested_exception (public member function) | |
[virtual] | destructs a nested exception (virtual public member function) |
replaces the contents of a nested_exception (public member function) | |
throws the stored exception (public member function) | |
obtains a pointer to the stored exception (public member function) |
(C++11) | throws its argument withstd::nested_exception mixed in (function template)[edit] |
(C++11) | throws the exception from astd::nested_exception (function template)[edit] |
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_constexpr_exceptions | 202411L | (C++26) | constexpr for exception types |
Demonstrates construction and recursion through a nested exception object.
#include <exception>#include <fstream>#include <iostream>#include <stdexcept>#include <string> // prints the explanatory string of an exception. If the exception is nested,// recurses to print the explanatory string of the exception it holdsvoid print_exception(conststd::exception& e,int level=0){std::cerr<<std::string(level,' ')<<"exception: "<< e.what()<<'\n';try{std::rethrow_if_nested(e);}catch(conststd::exception& nestedException){ print_exception(nestedException, level+1);}catch(...){}} // sample function that catches an exception and wraps it in a nested exceptionvoid open_file(conststd::string& s){try{std::ifstream file(s); file.exceptions(std::ios_base::failbit);}catch(...){std::throw_with_nested(std::runtime_error("Couldn't open "+ s));}} // sample function that catches an exception and wraps it in a nested exceptionvoid run(){try{ open_file("nonexistent.file");}catch(...){std::throw_with_nested(std::runtime_error("run() failed"));}} // runs the sample function above and prints the caught exceptionint main(){try{ run();}catch(conststd::exception& e){ print_exception(e);}}
Possible output:
exception: run() failed exception: Couldn't open nonexistent.file exception: basic_ios::clear
(C++11) | shared pointer type for handling exception objects (typedef)[edit] |
(C++11) | throws its argument withstd::nested_exception mixed in (function template)[edit] |
(C++11) | throws the exception from astd::nested_exception (function template)[edit] |