#pragma once #include #include "tl/detail/prologue.h" #include #include "tl/string.h" #include "string.h" namespace tl { template constexpr DST format() noexcept { return DST(); } template constexpr DST format(std::format_string format_str, Args&&... args) noexcept { DST buffer; std::format_to(std::back_inserter(buffer), format_str, std::forward(args)...); return buffer; } template constexpr DST& format_append(DST& dst, std::format_string format_str, Args&&... args) noexcept { std::format_to(std::back_inserter(dst), format_str, std::forward(args)...); return dst; } //template //constexpr DST format(const S& format_str) noexcept //{ // return DST(format_str); //} template tl::string format(std::format_string format_str, Args&&... args) noexcept { tl::fixed_vector buffer; std::format_to(std::back_inserter(buffer), format_str, std::forward(args)...); return tl::string(buffer.data(), buffer.size()); } template tl::string& format_append(tl::string& dst, std::format_string format_str, Args&&... args) noexcept { tl::fixed_vector buffer(dst.size()); if (!dst.empty()) memcpy(buffer.data(), dst.data(), dst.size()); std::format_to(std::back_inserter(buffer), format_str, std::forward(args)...); dst = tl::string(buffer.data(), buffer.size()); return dst; } }