std::expected<T,E>::transform_error
From cppreference.com
| プライマリテンプレート |
||
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()))>>
以下のいずれかの条件が満たされる場合、プログラムは不適格です。
-
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()));
目次 |
[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` に変更されました。 |
- ↑ `value()` は `E` がコピー構築可能であることを要求します(LWG issue 3843 を参照)。`operator*` はそうではありません。
- ↑ `*this` は 引数依存名前探索 をトリガーする可能性があります。
[edit] 関連項目
| 期待された値が含まれている場合は、それ自体を返します。そうでない場合は、期待されていない値に対する指定された関数の結果を返します。 (public member function) | |
期待される値が存在する場合、変換された期待される値を含む expected を返し、そうでなければ expected 自体を返す(public member function) |