36 #ifndef ABSL_STATUS_STATUSOR_H_
37 #define ABSL_STATUS_STATUSOR_H_
40 #include <initializer_list>
43 #include <type_traits>
46 #include "absl/base/attributes.h"
47 #include "absl/base/call_once.h"
48 #include "absl/meta/type_traits.h"
49 #include "absl/status/internal/statusor_internal.h"
50 #include "absl/status/status.h"
51 #include "absl/types/variant.h"
52 #include "absl/utility/utility.h"
91 const char*
what()
const noexcept
override;
108 template <
typename T>
109 #if ABSL_HAVE_CPP_ATTRIBUTE(nodiscard)
115 #endif // ABSL_HAVE_CPP_ATTRIBUTE(nodiscard)
186 template <
typename T>
192 template <
typename U>
239 std::is_constructible<T, const U&>,
240 std::is_convertible<const U&, T>,
252 std::is_constructible<T, const U&>,
266 std::is_convertible<U&&, T>,
310 std::is_constructible<T, const U&>,
311 std::is_assignable<T, const U&>,
314 IsConstructibleOrConvertibleOrAssignableFromStatusOr<
326 std::is_assignable<T, U&&>,
329 IsConstructibleOrConvertibleOrAssignableFromStatusOr<
352 std::is_convertible<U&&, absl::Status>,
353 std::is_constructible<absl::Status, U&&>,
367 std::is_constructible<absl::Status, U&&>,
380 std::is_convertible<U&&, absl::Status>,
381 std::is_constructible<absl::Status, U&&>,
412 std::is_constructible<T, U&&>, std::is_assignable<T&, U&&>,
414 std::is_same<absl::remove_cv_t<absl::remove_reference_t<U>>,
T>,
418 HasConversionOperatorToStatusOr<T, U&&>>>>,
421 this->
Assign(std::forward<U>(
v));
427 template <
typename...
Args>
429 template <
typename U,
typename...
Args>
445 std::is_constructible<T, U&&>, std::is_convertible<U&&, T>,
447 std::is_same<absl::remove_cv_t<absl::remove_reference_t<U>>,
464 std::is_same<absl::remove_cv_t<absl::remove_reference_t<U>>,
471 std::is_constructible<T, U&&>,
599 typename U,
typename...
Args,
601 std::is_constructible<T, std::initializer_list<U>&,
Args&&...>
::value,
616 template <
typename U>
618 template <
typename U>
625 template <
typename T>
627 if (lhs.
ok() && rhs.
ok())
return *lhs == *rhs;
634 template <
typename T>
636 return !(lhs == rhs);
644 template <
typename T>
647 template <
typename T>
648 template <
typename U>
653 this->AssignStatus(other.
status());
657 template <
typename T>
658 template <
typename U>
666 template <
typename T>
667 template <
typename...
Args>
671 template <
typename T>
672 template <
typename U,
typename...
Args>
677 template <
typename T>
681 template <
typename T>
686 template <
typename T>
692 template <
typename T>
698 template <
typename T>
706 template <
typename T>
714 template <
typename T>
720 template <
typename T>
726 template <
typename T>
732 template <
typename T>
738 template <
typename T>
744 template <
typename T>
750 template <
typename T>
751 template <
typename U>
756 return std::forward<U>(default_value);
759 template <
typename T>
760 template <
typename U>
765 return std::forward<U>(default_value);
768 template <
typename T>
776 #endif // ABSL_STATUS_STATUSOR_H_