Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::throw_with_nested

      From cppreference.com
      <cpp‎ |error
       
       
      Diagnostics library
       
      Defined in header<exception>
      template<class T>
      [[noreturn]]void throw_with_nested( T&& t);
      (since C++11)
      (constexpr since C++26)

      Ifstd::decay<T>::type is a non-final non-union class type that is neitherstd::nested_exception nor derived fromstd::nested_exception, throws an exception of an unspecified type that is publicly derived from bothstd::nested_exception and fromstd::decay<T>::type, and constructed fromstd::forward<T>(t). The default constructor of thenested_exception base class callsstd::current_exception, capturing the currently handled exception object, if any, in astd::exception_ptr.

      Otherwise, throwsstd::forward<T>(t).

      Requires thatstd::decay<T>::type isCopyConstructible.

      Contents

      [edit]Parameters

      t - the exception object to throw

      [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

      a mixin type to capture and store current exceptions
      (class)[edit]
      throws the exception from astd::nested_exception
      (function template)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/error/throw_with_nested&oldid=177872"

      [8]ページ先頭

      ©2009-2025 Movatter.jp