最終更新日時(UTC): 2025年07月11日 17時16分44秒
Koichi Murase が更新

履歴 編集

function
<future>

# std::promise::set_exception(C++11)

    void set_exception(exception_ptr p);

## 概要

結果の例外を設定する

## 効果

例外ポインタ`p`をアトミックに共有状態に格納し、準備完了状態(`future_status::ready`)にする。

## 戻り値

なし

## 例外

この関数は、以下のerror conditionを持つ`future_error` 例外オブジェクトを送出する可能性がある：

- `promise_already_satisfied` ： すでに値もしくは例外が設定されている
- `no_state` ： `*this`が共有状態を持っていない(`promise`オブジェクトがムーブされると起こりうる)

## 例

    #include <iostream>
    #include <future>
    #include <thread>
    #include <utility>
    #include <stdexcept>

    void calc(std::promise<int> p)
    {
      try {
        // 計算で何らかのエラーが発生した
        throw std::invalid_argument("invalid argument!");
      }
      catch (...) {
        // 呼び出し元スレッドに例外を設定する
        std::exception_ptr ep = std::current_exception();
        p.set_exception(ep);
      }
    }

    int main()
    {
      std::promise<int> p;
      std::future<int> f = p.get_future();

      std::thread t(calc, std::move(p));

      try {
        int result = f.get(); // promiseで設定された例外が送出される
      }
      catch (std::invalid_argument& e) {
        std::cout << e.what() << std::endl;
      }

      t.join();
    }

### 出力

    invalid argument!

## バージョン

### 言語

- C++11

### 処理系

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

## 参照