34 using value_type = char;
44 template<std::
size_t O>
45 constexpr fixed_string(
char const (&str)[O])
noexcept requires((O - 1) == N)
47 for (
auto i = 0_uz; i != (O - 1); ++i) {
52 constexpr operator std::string_view()
const noexcept
54 return std::string_view{_str.
data(), size()};
62 [[nodiscard]]
constexpr std::size_t size()
const noexcept
67 [[nodiscard]]
constexpr char& operator[](
size_t index)
noexcept
77 [[nodiscard]]
constexpr char const& operator[](
size_t index)
const noexcept
87 [[nodiscard]]
constexpr auto begin()
noexcept
92 [[nodiscard]]
constexpr auto end()
noexcept
94 return _str.
begin() + size();
97 [[nodiscard]]
constexpr bool operator==(
fixed_string const& rhs)
const noexcept =
default;
98 [[nodiscard]]
constexpr auto operator<=>(
fixed_string const& rhs)
const noexcept =
default;
101 [[nodiscard]]
constexpr bool operator==(
fixed_string<O> const& rhs)
const noexcept requires(O != N)
107 [[nodiscard]]
constexpr auto operator<=>(
fixed_string<O> const& rhs)
const noexcept requires(O != N)
109 return static_cast<std::string_view
>(*this) <=>
static_cast<std::string_view
>(rhs);
112 [[nodiscard]]
constexpr bool operator==(std::string_view rhs)
const noexcept
114 return static_cast<std::string_view
>(*this) == rhs;
117 [[nodiscard]]
constexpr auto operator<=>(std::string_view rhs)
const noexcept
119 return static_cast<std::string_view
>(*this) <=> rhs;
122 [[nodiscard]]
constexpr bool operator==(
std::string const &rhs)
const noexcept
124 return static_cast<std::string_view
>(*this) == rhs;
127 [[nodiscard]]
constexpr auto operator<=>(
std::string const &rhs)
const noexcept
129 return static_cast<std::string_view
>(*this) <=> rhs;
132 [[nodiscard]]
constexpr bool operator==(
char const *rhs)
const noexcept
134 return static_cast<std::string_view
>(*this) == rhs;
137 [[nodiscard]]
constexpr auto operator<=>(
char const *rhs)
const noexcept
139 return static_cast<std::string_view
>(*this) <=> rhs;
143 [[nodiscard]]
constexpr bool operator==(
char const (&rhs)[O])
const noexcept
149 [[nodiscard]]
constexpr auto operator<=>(
char const (&rhs)[O])
const noexcept
155 [[nodiscard]]
constexpr auto operator+(
fixed_string<O> const& rhs)
const noexcept
159 for (
auto src_i = 0_uz; src_i != N; ++src_i, ++dst_i) {
160 r[dst_i] = (*this)[src_i];
162 for (
auto src_i = 0_uz; src_i != O; ++src_i, ++dst_i) {
163 r[dst_i] = rhs[src_i];
184struct std::formatter<
hi::fixed_string<N>, CharT> : std::formatter<std::string_view, CharT> {
185 constexpr auto format(hi::fixed_string<N>
const& t,
auto& fc)
187 return std::formatter<std::string_view, CharT>::format(
static_cast<std::string_view
>(t), fc);