// expected<cv void, E>部分特殊化
// operator==により、下記オーバーロードが使用可能になる
template<class T2, class E2> requires is_void_v<T2>
friend constexpr bool operator!=(const expected& x, const expected<T2, E2>& y); // (1)
template<class E2>
friend constexpr bool operator!=(const expected& x, const unexpected<E2>& e); // (2)
template<class E2>
friend constexpr bool operator!=(const unexpected<E2>& e, const expected& x); // (3)
概要
- (1) :
expected
オブジェクト同士の非等値比較を行う。 - (2), (3) :
expected
オブジェクトとエラー値の非等値比較を行う。
適格要件
- (1) : 式
x.error() == y.error()
が適格であり、その結果をbool
へ変換可能であること。 - (2), (3) : 式
x.error() == e.error()
が適格であり、その結果をbool
へ変換可能であること。
戻り値
例
#include <cassert>
#include <expected>
int main()
{
std::expected<void, long> x1;
std::expected<void, short> y1;
std::expected<void, long> x2 = std::unexpected{1};
std::expected<void, short> y2 = std::unexpected{100};
// (1)
assert(not (x1 != y1));
assert(x2 != y2);
assert(x1 != y2);
assert(x2 != y1);
// (2), (3)
assert(x2 != std::unexpected{2});
assert(std::unexpected{2} != x2);
}
出力
バージョン
言語
- C++23
処理系
- Clang: 16.0 ✅
- GCC: 12.1 ✅
- ICC: ??
- Visual C++: ??