constexpr const T& value() const &; // (1)
constexpr T& value() &; // (2)
constexpr const T&& value() const &&; // (3)
constexpr T&& value() &&; // (4)
概要
正常値を取得する。
戻り値
動作説明用のメンバ変数として、正常値を保持するval
を導入する。
- (1), (2) : 正常値を保持していたら、
val
- (3), (4) : 正常値を保持していたら、
std::move(val)
例外
- (1), (2) : エラー値を保持していたら、例外
bad_expected_access(error())
をスローする - (3), (4) : エラー値を保持していたら、例外
bad_expected_access(std::move(error()))
をスローする
例
#include <expected>
#include <iostream>
#include <string>
int main()
{
std::expected<int, std::string> x = 1;
std::cout << x.value() << std::endl;
std::expected<int, std::string> y = std::unexpected{"ERR"};
try {
std::cout << y.value() << std::endl;
} catch (const std::bad_expected_access<std::string>& ex) {
std::cout << "throw:" << ex.error() << std::endl;
}
}
出力
1
throw:ERR
バージョン
言語
- C++23
処理系
- Clang: 16.0 ✅
- GCC: 12.1 ✅
- ICC: ??
- Visual C++: ??