Namespaces
Variants

std::expected<T,E>::or_else

ja.cppreference.net より
 
 
ユーティリティライブラリ
言語サポート
型サポート (基本型、RTTI)
ライブラリ機能テストマクロ (C++20)
プログラムユーティリティ
可変長引数関数
コルーチンサポート (C++20)
契約サポート (C++26)
三方比較
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

汎用ユーティリティ
関係演算子 (C++20で非推奨)
整数比較関数
(C++20)(C++20)(C++20)    
(C++20)
swap と 型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
共通の語彙型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
プライマリテンプレート
template< class F >
constexpr auto or_else( F&& f ) &;
(1) (C++23以降)
template< class F >
constexpr auto or_else( F&& f ) const&;
(2) (C++23以降)
template< class F >
constexpr auto or_else( F&& f ) &&;
(3) (C++23以降)
template< class F >
constexpr auto or_else( F&& f ) const&&;
(4) (C++23以降)
void 部分特殊化
template< class F >
constexpr auto or_else( F&& f ) &;
(5) (C++23以降)
template< class F >
constexpr auto or_else( F&& f ) const&;
(6) (C++23以降)
template< class F >
constexpr auto or_else( F&& f ) &&;
(7) (C++23以降)
template< class F >
constexpr auto or_else( F&& f ) const&&;
(8) (C++23以降)

もし *this が予期しない値を保持している場合、f を *this の予期しない値で呼び出し、その結果を返します。そうでなければ、期待値を表す std::expected オブジェクトを返します。

1-4) 期待値は val の期待値 *this で初期化されます。

型 G は次のように定義されます:

1,2) std::remove_cvref_t<std::invoke_result_t<F, decltype(error())>>
3,4) std::remove_cvref_t<std::invoke_result_t<F, decltype(std::move(error()))>>
5,6) std::remove_cvref_t<std::invoke_result_t<F, decltype(error())>>
7,8) std::remove_cvref_t<std::invoke_result_t<F, decltype(std::move(error()))>>

もし G が std::expected の特殊化でない場合、または std::is_same_v<G::value_type, T> が false である場合、プログラムは ill-formed です。

1,2) これらのオーバーロードは、std::is_constructible_v<T, decltype((val))> が true である場合にのみオーバーロード解決に参加します。
3,4) これらのオーバーロードは、std::is_constructible_v<T, decltype(std::move(val))> が true である場合にのみオーバーロード解決に参加します。

パラメータ

f - 適切な関数または Callable オブジェクトで、 std::expected を返すもの

戻り値

オーバーロード has_value() の値
true false
( 1,2 ) G ( std:: in_place , val ) std:: invoke ( std:: forward < F > ( f ) , error ( ) )
( 3,4 ) G ( std:: in_place , std :: move ( val ) ) std:: invoke ( std:: forward < F > ( f ) , std :: move ( error ( ) ) )
( 5,6 ) G ( ) std:: invoke ( std:: forward < F > ( f ) , error ( ) )
( 7,8 ) std:: invoke ( std:: forward < F > ( f ) , std :: move ( error ( ) ) )

注記

機能テスト マクロ 値 標準 機能
__cpp_lib_expected 202211L (C++23) std::expectedのモナディック関数

例

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 3938 C++23 期待値は value ( ) [1] によって取得されていた ** this に変更
LWG 3973 C++23 期待値は ** this [2] によって取得されていた val に変更
  1. ↑ value() は E がコピー構築可能であることを要求する( LWG issue 3843 を参照)。一方 operator* はこの要求を持たない。
  2. ↑ ** this は argument-dependent lookup を引き起こす可能性がある。

関連項目

期待される値が含まれている場合は expected 自体を返す。それ以外の場合は、変換された予期しない値を含む expected を返す
(公開メンバ関数)