From 7a0baae1ee422b970a45af27a255a8d3a1fd2db4 Mon Sep 17 00:00:00 2001 From: Mateusz Pusz Date: Mon, 18 Mar 2024 22:52:30 +0900 Subject: [PATCH] feat: precondition checks added to `basic_symbol_text` --- src/core/include/mp-units/bits/symbol_text.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/core/include/mp-units/bits/symbol_text.h b/src/core/include/mp-units/bits/symbol_text.h index cf3c05ef..0588a2c3 100644 --- a/src/core/include/mp-units/bits/symbol_text.h +++ b/src/core/include/mp-units/bits/symbol_text.h @@ -91,6 +91,7 @@ struct basic_symbol_text { constexpr explicit(false) basic_symbol_text(const char (&txt)[N + 1]) : unicode_(detail::to_u8string(basic_fixed_string{txt})), ascii_(txt) { + gsl_ExpectsAudit(txt[N] == char{}); gsl_Expects(detail::is_basic_literal_character_set(txt)); } @@ -102,6 +103,8 @@ struct basic_symbol_text { constexpr basic_symbol_text(const char8_t (&u)[N + 1], const char (&a)[M + 1]) : unicode_(u), ascii_(a) { + gsl_ExpectsAudit(u[N] == char8_t{}); + gsl_ExpectsAudit(a[M] == char{}); gsl_Expects(detail::is_basic_literal_character_set(a)); } @@ -113,7 +116,11 @@ struct basic_symbol_text { [[nodiscard]] constexpr const auto& unicode() const { return unicode_; } [[nodiscard]] constexpr const auto& ascii() const { return ascii_; } - [[nodiscard]] constexpr bool empty() const { return unicode().empty() && ascii().empty(); } + [[nodiscard]] constexpr bool empty() const + { + gsl_Expects(unicode().empty() == ascii().empty()); + return unicode().empty(); + } template [[nodiscard]] constexpr friend basic_symbol_text operator+(const basic_symbol_text& lhs,