diff --git a/AK/Error.h b/AK/Error.h index 50185897f5b..fa6e4e4ae6d 100644 --- a/AK/Error.h +++ b/AK/Error.h @@ -81,6 +81,9 @@ private: template class [[nodiscard]] ErrorOr { + template + friend class ErrorOr; + public: using ResultType = T; using ErrorType = E; @@ -98,19 +101,22 @@ public: template ALWAYS_INLINE ErrorOr(ErrorOr const& value) + requires(IsConvertible) : m_value_or_error(value.m_value_or_error.visit([](U const& v) -> Variant { return v; }, [](ErrorType const& error) -> Variant { return error; })) { } template ALWAYS_INLINE ErrorOr(ErrorOr& value) + requires(IsConvertible) : m_value_or_error(value.m_value_or_error.visit([](U& v) { return Variant(move(v)); }, [](ErrorType& error) { return Variant(move(error)); })) { } template ALWAYS_INLINE ErrorOr(ErrorOr&& value) - : m_value_or_error(value.visit([](U& v) { return Variant(move(v)); }, [](ErrorType& error) { return Variant(move(error)); })) + requires(IsConvertible) + : m_value_or_error(value.m_value_or_error.visit([](U& v) { return Variant(move(v)); }, [](ErrorType& error) { return Variant(move(error)); })) { }