unfuck std::format (#1815)

This commit is contained in:
goat 2024-05-26 15:33:08 +02:00 committed by GitHub
parent 0a219fcd82
commit d5d9942d91
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -113,7 +113,15 @@ namespace logging {
*/ */
template<typename Arg, typename... Args> template<typename Arg, typename... Args>
void print(Level level, const char* fmt, Arg&& arg1, Args&&... args) { void print(Level level, const char* fmt, Arg&& arg1, Args&&... args) {
print(level, std::vformat(fmt, std::make_format_args(to_format_arg(std::forward<Arg>(arg1)), to_format_arg(std::forward<Args>(args))...))); // make_format_args only accepts references now due to https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2905r2.html
// we can switch std::runtime_format in C++26 :) https://isocpp.org/files/papers/P2918R0.html
auto transformed_args = std::make_tuple(to_format_arg(arg1), to_format_arg(args)...);
auto format_args = std::apply(
[&](auto&... elems) { return std::make_format_args(elems...); },
transformed_args
);
print(level, std::vformat(fmt, format_args));
} }
template<typename...Args> void V(Args&&...args) { print(Level::Verbose, std::forward<Args>(args)...); } template<typename...Args> void V(Args&&...args) { print(Level::Verbose, std::forward<Args>(args)...); }