14 constexpr auto domain() const -> StatusCodeDomain const& {
19 [[nodiscard]]
constexpr auto empty() const ->
bool {
return m_domain ==
nullptr; }
21 constexpr auto message()
const {
23 return domain().do_message(*
this);
25 return container::ErasedString(
u8"[invalid status code]");
28 constexpr auto to_string()
const {
return message(); }
30 constexpr auto success() const ->
bool {
return !
empty() && !domain().do_failure(*
this); }
31 constexpr auto failure() const ->
bool {
return !
empty() && domain().do_failure(*
this); }
33 template<
typename Domain>
34 constexpr auto strictly_equivalent(StatusCode<Domain>
const& other)
const ->
bool {
35 if (this->
empty() || other.empty()) {
36 return this->
empty() == other.empty();
38 return domain().do_equivalent(*
this, other);
41 template<
typename Domain>
42 constexpr auto equivalent(StatusCode<Domain>
const& other)
const ->
bool {
43 return this->strictly_equivalent(other) || other.strictly_equivalent(*
this);
49 constexpr explicit StatusCode(StatusCodeDomain const* domain) : m_domain(domain) {}
51 StatusCode() =
default;
52 StatusCode(StatusCode
const&) =
default;
53 StatusCode(StatusCode&&) =
default;
55 auto operator=(StatusCode
const&) -> StatusCode& =
default;
56 auto operator=(StatusCode&&) -> StatusCode& =
default;
58 ~StatusCode() =
default;
63 template<
typename Domain>
64 friend class StatusCode;
#define DI_ASSERT(...)
Definition assert_bool.h:7
Definition status_code_forward_declaration.h:11
__UINT8_TYPE__ u8
Definition integers.h:9
StatusCode< platform::GenericDomain > GenericCode
Definition status_code_forward_declaration.h:13
constexpr auto empty
Definition empty.h:45
constexpr auto to_string
Definition to_string.h:14