名前空間
変種
操作

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

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

汎用ユーティリティ
関係演算子 (C++20で非推奨)
 
 
プライマリテンプレート
template< class F >
constexpr auto transform_error( F&& f ) &;
(1) (C++23から)
template< class F >
constexpr auto transform_error( F&& f ) const&;
(2) (C++23から)
template< class F >
constexpr auto transform_error( F&& f ) &&;
(3) (C++23から)
template< class F >
constexpr auto transform_error( F&& f ) const&&;
(4) (C++23から)
void 部分特殊化
template< class F >
constexpr auto transform_error( F&& f ) &;
(5) (C++23から)
template< class F >
constexpr auto transform_error( F&& f ) const&;
(6) (C++23から)
template< class F >
constexpr auto transform_error( F&& f ) &&;
(7) (C++23から)
template< class F >
constexpr auto transform_error( F&& f ) const&&;
(8) (C++23から)

*this が期待されていない値を含んでいる場合、*this の期待されていない値を引数として f を呼び出し、f の結果で初期化された期待されていない値を含む std::expected オブジェクトを返します。そうでない場合、期待された値を表す std::expected オブジェクトを返します。

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

与えられた型 G

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

以下のいずれかの条件が満たされる場合、プログラムは不適格です。

  • Gstd::unexpected の有効なテンプレート引数ではありません。
  • 以下の対応する宣言は不正形式です。
1,2) G g(std::invoke(std::forward<F>(f), error()));
3,4) G g(std::invoke(std::forward<F>(f), std::move(error()));
5,6) G g(std::invoke(std::forward<F>(f), error()));
7,8) G g(std::invoke(std::forward<F>(f), std::move(error()));


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

目次

[edit] パラメーター

f - 非参照型の値を返す、適切な関数または Callable オブジェクト

[edit] 戻り値

与えられた式 expr

1,2) std::invoke(std::forward<F>(f), error())
3,4) std::invoke(std::forward<F>(f), std::move(error()))
5,6) std::invoke(std::forward<F>(f), error())
7,8) std::invoke(std::forward<F>(f), std::move(error()))

戻り値は以下のように定義されます。

 オーバーロード  `has_value()` の値。
true false
(1,2) std::expected<T, G>(std::in_place, val) std::expected<T, G>
    (std::unexpect, expr)
(3,4) std::expected<T, G>(std::in_place, std::move(val))
(5,6) std::expected<T, G>()
(7,8)

[edit]

[edit] 不具合報告

以下の動作変更を伴う欠陥報告が、以前に公開された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` は 引数依存名前探索 をトリガーする可能性があります。

[edit] 関連項目

期待された値が含まれている場合は、それ自体を返します。そうでない場合は、期待されていない値に対する指定された関数の結果を返します。
(public member function) [edit]
期待される値が存在する場合、変換された期待される値を含む expected を返し、そうでなければ expected 自体を返す
(public member function) [編集]
English 日本語 中文(简体) 中文(繁體)