#
template<class Err = E>
constexpr explicit unexpected(Err&& e);
template<class. Args>
constexpr explicit unexpected(in_place_t, Args&&. args);
template<class U, class. Args>
constexpr explicit unexpected(in_place_t, initializer_list<U> il, Args&&. args);
constexpr const E& error() const & noexcept;
constexpr E& error() & noexcept;
constexpr E&& error() && noexcept;
constexpr const E&& error() const && noexcept;
constexpr void swap(unexpected& other) noexcept(is_nothrow_swappable_v<E>);
friend constexpr void swap(unexpected& x, unexpected& y) noexcept(noexcept(x.swap(y));
template<class E2>
friend constexpr bool operator=(const unexpected& x, const unexpected<E2>& y);
constexpr explicit bad_expected_access(E e);
constexpr const E& error() const & noexcept;
constexpr E& error() & noexcept;
constexpr E&& error() && noexcept;
constexpr const E&& error() const && noexcept;
constexpr const char* what() const noexcept override;
constexpr const char* what() const noexcept override;
constexpr expected();
constexpr expected(const expected& rhs);
constexpr expected(expected&& rhs) noexcept(see below);
template<class U, class G>
constexpr explicit(see below) expected(const expected<U, G>& rhs);
template<class U, class G>
constexpr explicit(see below) expected(expected<U, G>& rhs);
template<class U = remove_cv_t<T>>
constexpr explicit(!is_convertible_v<U, T>) expected(U&& v);
template<class G>
constexpr explicit(!is_convertible_v<const G&, E>) expected(const unexpected<G>& e);
template<class G>
constexpr explicit(!is_convertible_v<G, E>) expected(unexpected<G>& e);
template<class. Args>
constexpr explicit expected(in_place_t, Args&&. args);
template<class U, class. Args>
constexpr explicit expected(in_place_t, initializer_list<U> il, Args&&. args);
template<class. Args>
constexpr explicit expected(unexpect_t, Args&&. args);
template<class U, class. Args>
constexpr explicit expected(unexpect_t, initializer_list<U> il, Args&&. args);
constexpr ~expected();
constexpr expected& operator=(const expected& rhs);
constexpr expected& operator=(expected&& rhs) noexcept(see below);
template<class U = remove_cv_t<T>>
constexpr expected& operator=(U&& v);
template<class G>
constexpr expected& operator=(const unexpected<G>& e);
template<class G>
constexpr expected& operator=(unexpected<G>& e);
template<class. Args>
constexpr T& emplace(Args&&. args) noexcept;
template<class U, class. Args>
constexpr T& emplace(initializer_list<U> il, Args&&. args) noexcept;
constexpr void swap(expected& rhs) noexcept(see below);
this->has_value() | !this->has_value() | |
rhs.has_value() | equivalent to: using std::swap; swap(val, rhs.val); | calls rhs.swap(*this) |
!rhs.has_value() | see below | equivalent to: using std::swap; swap(unex, rhs.unex); |
friend constexpr void swap(expected& x, expected& y) noexcept(noexcept(x.swap(y));
constexpr const T* operator->() const noexcept;
constexpr T* operator->() noexcept;
constexpr const T& operator*() const & noexcept;
constexpr T& operator*() & noexcept;
constexpr T&& operator*() && noexcept;
constexpr const T&& operator*() const && noexcept;
constexpr explicit operator bool() const noexcept;
constexpr bool has_value() const noexcept;
constexpr const T& value() const &;
constexpr T& value() &;
constexpr T&& value() &&;
constexpr const T&& value() const &&;
constexpr const E& error() const & noexcept;
constexpr E& error() & noexcept;
constexpr E&& error() && noexcept;
constexpr const E&& error() const && noexcept;