75#define OR_RETURN(expr) \
77 decltype(expr)&& __or_return_expr = (expr); \
78 typedef android::base::OkOrFail<std::remove_reference_t<decltype(__or_return_expr)>> \
80 if (!ok_or_fail::IsOk(__or_return_expr)) { \
81 return ok_or_fail::Fail(std::move(__or_return_expr)); \
83 ok_or_fail::Unwrap(std::move(__or_return_expr)); \
87#if defined(__BIONIC__)
88#define OR_FATAL(expr) \
90 decltype(expr)&& __or_fatal_expr = (expr); \
91 typedef android::base::OkOrFail<std::remove_reference_t<decltype(__or_fatal_expr)>> \
93 if (!ok_or_fail::IsOk(__or_fatal_expr)) { \
94 __assert(__FILE__, __LINE__, ok_or_fail::ErrorMessage(__or_fatal_expr).c_str()); \
96 ok_or_fail::Unwrap(std::move(__or_fatal_expr)); \
99#define OR_FATAL(expr) \
101 decltype(expr)&& __or_fatal_expr = (expr); \
102 typedef android::base::OkOrFail<std::remove_reference_t<decltype(__or_fatal_expr)>> \
104 if (!ok_or_fail::IsOk(__or_fatal_expr)) { \
105 fprintf(stderr, "%s:%d: assertion \"%s\" failed", __FILE__, __LINE__, \
106 ok_or_fail::ErrorMessage(__or_fatal_expr).c_str()); \
109 ok_or_fail::Unwrap(std::move(__or_fatal_expr)); \
118template <
typename T,
typename =
void>
124 template <
typename U>
std::string SystemErrorCodeToString(int error_code)
Definition: errors_unix.cpp:25
OkOrFail(const T &)=delete
static std::string ErrorMessage(const T &v)
static bool IsOk(const T &)