14 #ifndef OR_TOOLS_BASE_STATUS_MACROS_H_
15 #define OR_TOOLS_BASE_STATUS_MACROS_H_
17 #include "absl/status/status.h"
18 #include "absl/status/statusor.h"
27 #define RETURN_IF_ERROR(expr) \
30 const ::absl::Status _status = (expr); \
31 if (!_status.ok()) return _status; \
35 #define STATUS_MACROS_CONCAT_NAME_INNER(x, y) x##y
36 #define STATUS_MACROS_CONCAT_NAME(x, y) STATUS_MACROS_CONCAT_NAME_INNER(x, y)
43 return result.status();
46 #define ASSIGN_OR_RETURN_IMPL(status, lhs, rexpr) \
47 ::absl::Status status = DoAssignOrReturn(lhs, (rexpr)); \
48 if (!status.ok()) return status;
59 #define ASSIGN_OR_RETURN(lhs, rexpr) \
60 ASSIGN_OR_RETURN_IMPL( \
61 STATUS_MACROS_CONCAT_NAME(_status_or_value, __COUNTER__), lhs, rexpr);
65 #endif // OR_TOOLS_BASE_STATUS_MACROS_H_