Namespaces
Variants
Actions

std::nested_exception

From cppreference.com
< cpp‎ | error
 
 
 
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 std::nested_exception are constexpr.

(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

throws its argument with std::nested_exception mixed in
(function template)[edit]
throws the exception from a std::nested_exception
(function template)[edit]

[edit]Notes

Feature-test macro ValueStdFeature
__cpp_lib_constexpr_exceptions202411L(C++26)constexpr for exception types

[edit]Example

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

[edit]See also

shared pointer type for handling exception objects
(typedef)[edit]
throws its argument with std::nested_exception mixed in
(function template)[edit]
throws the exception from a std::nested_exception
(function template)[edit]
close