• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    class template
    <expected>

    std::unexpected

    namespace std {
      template<class E>
      class unexpected;
    }
    

    概要

    unexpectedクラスは、std::expected<T, E>に格納される任意の型Eのエラー値を表現するヘルパークラスである。

    適格要件

    Eは非オブジェクト型、配列型、unexpectedの特殊化、CV修飾された型のいずれでもないこと。

    メンバ関数

    構築・破棄

    名前 説明 対応バージョン
    (constructor) コンストラクタ C++23
    (destructor) デストラクタ C++23

    代入

    名前 説明 対応バージョン
    constexpr unexpected& operator=(const unexpected&) = default; コピー代入演算子 C++23
    constexpr unexpected& operator=(unexpected&&) = default; ムーブ代入演算子 C++23
    swap 他のunexpectedオブジェクトとデータを入れ替える C++23

    値の観測

    名前 説明 対応バージョン
    error エラー値を取得する C++23

    比較

    名前 説明 対応バージョン
    operator== 等値比較 C++23
    operator!= 非等値比較 C++23

    非メンバ関数

    名前 説明 対応バージョン
    swap 2つのunexpectedオブジェクトを入れ替える C++23

    推論補助

    名前 説明 対応バージョン
    (deduction_guide) クラステンプレートの推論補助 C++23

    #include <expected>
    #include <iomanip>
    #include <iostream>
    #include <string>
    
    // 整数除算
    std::expected<int, std::string> idiv(int a, int b)
    {
      if (b == 0) {
        return std::unexpected{"divide by zero"};
      }
      if (a % b != 0) {
        return std::unexpected{"out of domain"};        
      }
      return a / b;
    }
    
    void dump_result(const std::expected<int, std::string>& v)
    {
      if (v) {
        std::cout << *v << std::endl;
      } else {
        std::cout << std::quoted(v.error()) << std::endl;        
      }
    }
    
    int main()
    {
      dump_result(idiv(10, 2));
      dump_result(idiv(10, 3));
      dump_result(idiv(10, 0));
    }
    

    出力

    5
    "out of domain"
    "divide by zero"
    

    バージョン

    言語

    • C++23

    処理系

    関連項目

    参照