最終更新日時: 2025年04月03日 16時03分23秒 (JST)
Akira Takahashi が更新

履歴 編集

function template
<exception>

# std::make_exception_ptr(C++11)

    namespace std {
      template <class E>
      exception_ptr make_exception_ptr(E e) noexcept;           // (1) C++11
      template <class E>
      constexpr exception_ptr make_exception_ptr(E e) noexcept; // (1) C++26
    }

## 概要

引数の例外オブジェクトを元に`exception_ptr`オブジェクトを生成する。

## 効果

    try {
      throw e;
    } catch(...) {
      return current_exception();
    }

## 戻り値

例外オブジェクト`e`を指す`exception_ptr`オブジェクトを返す。

## 例外

投げない

## 例

    #include <iostream>
    #include <exception>
    #include <stdexcept>

    int main()
    {
      std::exception_ptr p = std::make_exception_ptr(std::runtime_error("error!!!"));

      try {
        std::rethrow_exception(p);
      }
      catch (std::runtime_error& e) {
        std::cout << e.what() << std::endl;
      }
    }

### 出力

    error!!!

## バージョン

### 言語

- C++11

### 処理系

- Clang: ??
- GCC: 4.7.0 ✅
- ICC: ??
- Visual C++: 2012 ✅, 2013 ✅, 2015 ✅

## 実装例

    template <class E>
    exception_ptr make_exception_ptr(E e) noexcept
    {
      try {
        throw e;
      }
      catch (...) {
        return current_exception();
      }
    }

## 関連項目

- C++26 定数評価での例外送出を許可