From cppreference.com
This header is part of the
library.
Classes
(C++23)
a wrapper that contains either an expected or error value
(class template)
(C++23)
represented as an unexpected value
(class template)
(C++23)
exception indicating checked access to an expected that contains an unexpected value
(class template)
(C++23)
in-place construction tag for unexpected value in expected
(tag)
Synopsis
namespacestd{// class template unexpectedtemplate<classE>classunexpected;// class template bad_expected_accesstemplate<classE>classbad_expected_access;// specialization of bad_expected_access for voidtemplate<>classbad_expected_access<void>;// in-place construction of unexpected valuesstructunexpect_t{explicitunexpect_t()=default;};inlineconstexprunexpect_tunexpect{};// class template expectedtemplate<classT,classE>classexpected;// partial specialization of expected for void typestemplate<classT,classE>requiresis_void_v<T>classexpected<T,E>;}Class template std::unexpected
namespacestd{template<classE>classunexpected{public:// constructorsconstexprunexpected(constunexpected&)=default;constexprunexpected(unexpected&&)=default;template<class...Args>constexprexplicitunexpected(in_place_t,Args&&...);template<classU,class...Args>constexprexplicitunexpected(in_place_t,initializer_list<U>,Args&&...);template<classErr=E>constexprexplicitunexpected(Err&&);// assignmentconstexprunexpected&operator=(constunexpected&)=default;constexprunexpected&operator=(unexpected&&)=default;// observerconstexprconstE&error()const&noexcept;constexprE&error()&noexcept;constexprconstE&&error()const&&noexcept;constexprE&&error()&&noexcept;// swapconstexprvoidswap(unexpected&other)noexcept(/* see description */);friendconstexprvoidswap(unexpected&x,unexpected&y)noexcept(noexcept(x.swap(y)));// equality operatortemplate<classE2>friendconstexprbooloperator==(constunexpected&,constunexpected<E2>&);private:Eunex;// exposition only};template<classE>unexpected(E)->unexpected<E>;}Class template std::bad_expected_access
namespacestd{template<classE>classbad_expected_access:publicbad_expected_access<void>{public:// explicit constructorexplicitbad_expected_access(E);// observersconstchar*what()constnoexceptoverride;E&error()&noexcept;constE&error()const&noexcept;E&&error()&&noexcept;constE&&error()const&&noexcept;private:Eunex;// exposition only};}Class template specialization std::bad_expected_access<void>
namespacestd{template<>classbad_expected_access<void>:publicexception{protected:// constructorsbad_expected_access()noexcept;bad_expected_access(constbad_expected_access&);bad_expected_access(bad_expected_access&&);bad_expected_access&operator=(constbad_expected_access&);bad_expected_access&operator=(bad_expected_access&&);~bad_expected_access();public:constchar*what()constnoexceptoverride;};}Class template std::expected
namespacestd{template<classT,classE>classexpected{public:usingvalue_type=T;usingerror_type=E;usingunexpected_type=unexpected<E>;template<classU>usingrebind=expected<U,error_type>;// constructorsconstexprexpected();constexprexplicit(/* see description */)expected(constexpected&);constexprexplicit(/* see description */)expected(expected&&)noexcept(/* see description */);template<classU,classG>constexprexplicit(/* see description */)expected(constexpected<U,G>&);template<classU,classG>constexprexplicit(/* see description */)expected(expected<U,G>&&);template<classU=remove_cv_t<T>>constexprexplicit(/* see description */)expected(U&&v);template<classG>constexprexpected(constunexpected<G>&);template<classG>constexprexpected(unexpected<G>&&);template<class...Args>constexprexplicitexpected(in_place_t,Args&&...);template<classU,class...Args>constexprexplicitexpected(in_place_t,initializer_list<U>,Args&&...);template<class...Args>constexprexplicitexpected(unexpect_t,Args&&...);template<classU,class...Args>constexprexplicitexpected(unexpect_t,initializer_list<U>,Args&&...);// destructorconstexpr~expected();// assignmentconstexprexpected&operator=(constexpected&);constexprexpected&operator=(expected&&)noexcept(/* see description */);template<classU=remove_cv_t<T>>constexprexpected&operator=(U&&);template<classG>constexprexpected&operator=(constunexpected<G>&);template<classG>constexprexpected&operator=(unexpected<G>&&);template<class...Args>constexprT&emplace(Args&&...)noexcept;template<classU,class...Args>constexprT&emplace(initializer_list<U>,Args&&...)noexcept;// swapconstexprvoidswap(expected&)noexcept(/* see description */);friendconstexprvoidswap(expected&,expected&)noexcept(/* see description */);// observersconstexprconstT*operator->()constnoexcept;constexprT*operator->()noexcept;constexprconstT&operator*()const&noexcept;constexprT&operator*()&noexcept;constexprconstT&&operator*()const&&noexcept;constexprT&&operator*()&&noexcept;constexprexplicitoperatorbool()constnoexcept;constexprboolhas_value()constnoexcept;constexprconstT&value()const&;constexprT&value()&;constexprconstT&&value()const&&;constexprT&&value()&&;constexprconstE&error()const&;constexprE&error()&;constexprconstE&&error()const&&;constexprE&&error()&&;template<classU=remove_cv_t<T>>constexprTvalue_or(U&&)const&;template<classU=remove_cv_t<T>>constexprTvalue_or(U&&)&&;template<classG=E>constexprEerror_or(G&&)const&;template<classG=E>constexprEerror_or(G&&)&&;// monadic operationstemplate<classF>constexprautoand_then(F&&f)&;template<classF>constexprautoand_then(F&&f)&&;template<classF>constexprautoand_then(F&&f)const&;template<classF>constexprautoand_then(F&&f)const&&;template<classF>constexprautoor_else(F&&f)&;template<classF>constexprautoor_else(F&&f)&&;template<classF>constexprautoor_else(F&&f)const&;template<classF>constexprautoor_else(F&&f)const&&;template<classF>constexprautotransform(F&&f)&;template<classF>constexprautotransform(F&&f)&&;template<classF>constexprautotransform(F&&f)const&;template<classF>constexprautotransform(F&&f)const&&;template<classF>constexprautotransform_error(F&&f)&;template<classF>constexprautotransform_error(F&&f)&&;template<classF>constexprautotransform_error(F&&f)const&;template<classF>constexprautotransform_error(F&&f)const&&;// equality operatorstemplate<classT2,classE2>requires(!is_void_v<T2>)friendconstexprbooloperator==(constexpected&x,constexpected<T2,E2>&y);template<classT2>friendconstexprbooloperator==(constexpected&,constT2&);template<classE2>friendconstexprbooloperator==(constexpected&,constunexpected<E2>&);private:boolhas_val;// exposition onlyunion{Tval;// exposition onlyEunex;// exposition only};};}Partial specialization of std::expected for void types
namespacestd{template<classT,classE>requiresis_void_v<T>classexpected<T,E>{public:usingvalue_type=T;usingerror_type=E;usingunexpected_type=unexpected<E>;template<classU>usingrebind=expected<U,error_type>;// constructorsconstexprexpected()noexcept;constexprexplicit(/* see description */)expected(constexpected&);constexprexplicit(/* see description */)expected(expected&&)noexcept(/* see description */);template<classU,classG>constexprexplicit(/* see description */)expected(constexpected<U,G>&);template<classU,classG>constexprexplicit(/* see description */)expected(expected<U,G>&&);template<classG>constexprexpected(constunexpected<G>&);template<classG>constexprexpected(unexpected<G>&&);constexprexplicitexpected(in_place_t)noexcept;template<class...Args>constexprexplicitexpected(unexpect_t,Args&&...);template<classU,class...Args>constexprexplicitexpected(unexpect_t,initializer_list<U>,Args&&...);// destructorconstexpr~expected();// assignmentconstexprexpected&operator=(constexpected&);constexprexpected&operator=(expected&&)noexcept(/* see description */);template<classG>constexprexpected&operator=(constunexpected<G>&);template<classG>constexprexpected&operator=(unexpected<G>&&);constexprvoidemplace()noexcept;// swapconstexprvoidswap(expected&)noexcept(/* see description */);friendconstexprvoidswap(expected&,expected&)noexcept(/* see description */);// observersconstexprexplicitoperatorbool()constnoexcept;constexprboolhas_value()constnoexcept;constexprvoidoperator*()constnoexcept;constexprvoidvalue()const&;constexprvoidvalue()&&;constexprconstE&error()const&;constexprE&error()&;constexprconstE&&error()const&&;constexprE&&error()&&;template<classG=E>constexprEerror_or(G&&)const&;template<classG=E>constexprEerror_or(G&&)&&;// monadic operationstemplate<classF>constexprautoand_then(F&&f)&;template<classF>constexprautoand_then(F&&f)&&;template<classF>constexprautoand_then(F&&f)const&;template<classF>constexprautoand_then(F&&f)const&&;template<classF>constexprautoor_else(F&&f)&;template<classF>constexprautoor_else(F&&f)&&;template<classF>constexprautoor_else(F&&f)const&;template<classF>constexprautoor_else(F&&f)const&&;template<classF>constexprautotransform(F&&f)&;template<classF>constexprautotransform(F&&f)&&;template<classF>constexprautotransform(F&&f)const&;template<classF>constexprautotransform(F&&f)const&&;template<classF>constexprautotransform_error(F&&f)&;template<classF>constexprautotransform_error(F&&f)&&;template<classF>constexprautotransform_error(F&&f)const&;template<classF>constexprautotransform_error(F&&f)const&&;// equality operatorstemplate<classT2,classE2>requiresis_void_v<T2>friendconstexprbooloperator==(constexpected&x,constexpected<T2,E2>&y);template<classE2>friendconstexprbooloperator==(constexpected&,constunexpected<E2>&);private:boolhas_val;// exposition onlyunion{Eunex;// exposition only};};}