Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::nested_exception

      From cppreference.com
      <cpp‎ |error
       
       
      Diagnostics library
       
      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 ofstd::nested_exception areconstexpr.

      (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 withstd::nested_exception mixed in
      (function template)[edit]
      throws the exception from astd::nested_exception
      (function template)[edit]

      [edit]Notes

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

      [edit]Example

      [edit]

      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

      shared pointer type for handling exception objects
      (typedef)[edit]
      throws its argument withstd::nested_exception mixed in
      (function template)[edit]
      throws the exception from astd::nested_exception
      (function template)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/error/nested_exception&oldid=177876"

      [8]ページ先頭

      ©2009-2025 Movatter.jp