|
|
Member functions | ||||
Observers | ||||
Monadic operations | ||||
Modifiers | ||||
Non-member functions | ||||
operator==(std::expected) | ||||
Helper classes | ||||
Primary template | ||
template<class T2,class E2> requires(!std::is_void_v<T2>) | (1) | (since C++23) |
template<class E2> friendconstexprbool operator==(const expected& lhs, | (2) | (since C++23) |
template<class T2> friendconstexprbool operator==(const expected& lhs,const T2& val); | (3) | (since C++23) |
void partial specialization | ||
template<class T2,class E2> requiresstd::is_void_v<T2> | (4) | (since C++23) |
template<class E2> friendconstexprbool operator==(const expected& lhs, | (5) | (since C++23) |
Performs comparison operations onstd::expected objects.
If any of the following expressions is ill-formed, or its result is not convertible tobool, the program is ill-formed: | (until C++26) |
This overload participates in overload resolution only if all following expressions is well-formed, and their results are convertible tobool: | (since C++26) |
If the expressionlhs.error()== unex.error() is ill-formed, or its result is not convertible tobool, the program is ill-formed. | (until C++26) |
This overload participates in overload resolution only if the expressionlhs.error()== unex.error() is well-formed, and its result is convertible tobool. | (since C++26) |
If the expression*lhs== val is ill-formed, or its result is not convertible tobool, the program is ill-formed. | (until C++26) |
This overload participates in overload resolution only if all following conditions are satisfied:
| (since C++26) |
If the expressionlhs.error()== rhs.error() is ill-formed, or its result is not convertible tobool, the program is ill-formed. | (until C++26) |
This overload participates in overload resolution only if the expressionlhs.error()== rhs.error() is well-formed, and its result is convertible tobool. | (since C++26) |
If the expressionlhs.error()== unex.error() is ill-formed, or its result is not convertible tobool, the program is ill-formed. | (until C++26) |
This overload participates in overload resolution only if the expressionlhs.error()== unex.error() is well-formed, and its result is convertible tobool. | (since C++26) |
These functions are not visible to ordinaryunqualified orqualified lookup, and can only be found byargument-dependent lookup whenstd::expected<T, E>
is an associated class of the arguments.
The!=
operator issynthesized fromoperator==
.
Contents |
lhs, rhs | - | std::expected object(s) to compare |
unex | - | std::unexpected value to compare tolhs |
val | - | value to compare to the expected value contained inlhs |
Throws when and what the comparison throws.
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_constrained_equality | 202411L | (C++26) | constrained comparison operators forstd::expected |
#include <expected>#include <iostream>#include <string_view> usingnamespace std::string_view_literals; int main(){auto x1{"\N{GREEN HEART}"sv};auto x2{"\N{CROSS MARK}"sv};std::expected<std::string_view,int> e1{x1}, e2{x1}, e3{x2};std::unexpected u1{13}; std::cout<<"Overload (1):\n"<< e1.value()<<(e1== e2?" == ":" != ")<<*e2<<'\n'<< e1.value()<<(e1!= e3?" != ":" == ")<<*e3<<"\n\n"; std::cout<<"Overload (2):\n"<< e1.value()<<(e1== u1?" == ":" != ")<< u1.error()<<'\n'; e1=std::unexpected{13};std::cout<< e1.error()<<(e1== u1?" == ":" != ")<< u1.error()<<'\n'; e1=std::unexpected{31};std::cout<< e1.error()<<(e1!= u1?" != ":" == ")<< u1.error()<<'\n'; std::cout<<"Overload (3):\n"<<*e1<<(e1== x1?" == ":" != ")<< x1<<'\n'<<*e1<<(e1!= x2?" != ":" == ")<< x2<<"\n\n";}
Output:
Overload (1):💚 == 💚💚 != ❌ Overload (2):💚 != 1313 == 1331 != 13 Overload (3):💚 == 💚💚 != ❌
(C++23) | comparesstd::unexpected objects (function template) |