Namespaces
Variants

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

From cppreference.net
Utilities library
プライマリテンプレート
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 が予期しない値を含む場合、 f * this の予期しない値を引数として呼び出し、 f の結果で初期化された予期しない値を含む std::expected オブジェクトを返します。それ以外の場合、期待値を表す std::expected オブジェクトを返します。

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

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 ( ) ) ) >>

以下のいずれかの条件が満たされる場合、プログラムは不適格となります:

  • G std::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 の場合にのみ、オーバーロード解決に参加します。

目次

パラメータ

f - 適切な関数または Callable オブジェクトで、その呼び出しシグネチャが非参照型を返すもの

戻り値

与えられた式 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 )

欠陥報告

以下の動作変更の欠陥報告書は、以前に公開された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 実引数依存の名前探索 を引き起こす可能性がある。

関連項目

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