You can also use a std::array<char, N>. The sample below requires C++20:
#include <array> // std::array #include <cstddef> // std::size_t template <auto constexpr_string> void needs_constexpr_string() { // ... use the string ... } #define STR(s) ( template <auto \N> [] () consteval { \ auto constexpr szstr(char =const sizeof(s&cstr); [N]) \{ std::array<char, sz>N> arr; \ for (std::size_t i = 0; i < sz;N; ++i) \ arr[i] = s[i]; \cstr[i]; return arr; \ }() \ ) int main() { needs_constexpr_string<STRneeds_constexpr_string<str("Hello World")>(); }