28#include <fmt/compile.h>
29#include <fmt/format.h>
30#include <range/v3/algorithm/copy.hpp>
31#include <range/v3/algorithm/copy_n.hpp>
32#include <range/v3/algorithm/find.hpp>
33#include <range/v3/range/access.hpp>
34#include <range/v3/range/concepts.hpp>
47template <std::
size_t N>
55 if (input[N] !=
'\0') {
58 ranges::copy_n(std::data(input), N + 1,
data.begin());
63 ranges::copy_n(ranges::begin(rng), N + 1,
data.begin());
65 if (
data.back() !=
'\0') {
70 std::array<char, N + 1>
data{};
72 consteval std::size_t
size()
const {
return data.size(); }
75 consteval operator std::string_view()
const {
return data.data(); }
77 std::string
str()
const {
return data.data(); }
79 template <std::
size_t OtherSize>
81 return std::string_view{*
this} <=> std::string_view{rhs};
85 constexpr auto operator<=>(std::string_view rhs)
const {
return std::string_view{*
this} <=> rhs; }
87 template <std::
size_t OtherSize>
89 return std::string_view{*
this} == std::string_view{rhs};
93 consteval bool operator==(std::string_view rhs)
const {
return std::string_view{*
this} == rhs; }
97template <std::
size_t N>
107#if !defined(__GNUC__) || __GNUC__ >= 14
108static_assert(
"abc" == std::string_view{
StaticString(
"abc")});
111template <
StaticString Fmt, std::size_t MaxSz = 10 * 1'024, fmt::formattable... Args>
113 constexpr auto COMPILED_FMT = FMT_COMPILE(Fmt.data.begin());
117 fmt::format_to(result.
data.begin(), COMPILED_FMT, std::forward<Args>(args)...);
122static_assert(
static_format<
"{0} + {0} = {1}">(1, 2) ==
"1 + 1 = 2");
125template <StaticString String>
126consteval auto operator""_static() {
A fully compile-time capable string type Guaranteed to be null-terminated.
Definition static_string.hpp:49
consteval StaticString()=default
consteval StaticString(const ranges::forward_range auto &rng)
Definition static_string.hpp:62
constexpr auto operator<=>(std::string_view rhs) const
Definition static_string.hpp:85
consteval auto operator<=>(const StaticString< OtherSize > &rhs) const
Definition static_string.hpp:80
consteval StaticString(const char(&input)[N+1])
Definition static_string.hpp:54
consteval bool operator==(const StaticString< OtherSize > &rhs) const
Definition static_string.hpp:88
consteval std::size_t size() const
Definition static_string.hpp:72
std::string str() const
Definition static_string.hpp:77
consteval bool operator==(std::string_view rhs) const
Definition static_string.hpp:93
std::array< char, N+1 > data
Definition static_string.hpp:70
Definition asm_buffer.hpp:19
consteval auto static_format(Args &&... args)
Definition static_string.hpp:112
StaticString(const char(&input)[N]) -> StaticString< N - 1 >