std::nested_exception
From cppreference.com
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 |
[edit]Member functions
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) |
[edit]Non-member functions
(C++11) | throws its argument with std::nested_exception mixed in (function template) |
(C++11) | throws the exception from a std::nested_exception (function template) |
[edit]Notes
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_constexpr_exceptions | 202411L | (C++26) | constexpr for exception types |
[edit]Example
Demonstrates construction and recursion through a nested exception object.
Run this code
#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
[edit]See also
(C++11) | shared pointer type for handling exception objects (typedef) |
(C++11) | throws its argument with std::nested_exception mixed in (function template) |
(C++11) | throws the exception from a std::nested_exception (function template) |